微信侧滑关闭实践

前言

本次项目基于bingoogolapple/BGASwipeBackLayout-Android进行二次修改,优化了对国产手机导航栏的适配(比如oppo r7)、优化了侧滑的粘手体验、优化了侧滑的底图渲染逻辑。

特性

类似微信侧滑关闭,伴随着当前activity右滑出场,底部的activity左侧入场。

思路简析

我们首先对比下,对于一个Activity,开启侧滑关闭后,节点树发生了什么变化


normal.png
微信侧滑关闭实践_第1张图片
slide.png

从图中我们可以发现,要实现侧滑关闭,必须满足两个条件

  1. 插入BGASwipeBackLayout作为顶级节点,使得当前Activity能响应侧滑移动手势
  2. 插入BGASwipeBackShadowView作为底部视图,在侧滑过程中展露而出;它有两个子节点:ImageView是对上一个Activity的截图,View是阴影,颜色是半透明黑。
节点树的变动过程如下
  1. 在侧滑的父类里开启注入口子
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //在业务页面没渲染前,先插入侧滑控件
         插入侧滑控件();
        super.onCreate(savedInstanceState);
    }
  1. 生成BGASwipeBackLayout、同时创建BGASwipeBackShadowView插入到前者作为子类
  2. 把业务页面从节点树上,移动到BGASwipeBackLayout下作为子类
        //查找业务页面
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        业务页面= decorView.getChildAt(0);

       //业务页面从节点树摘除
        decorView.removeView(业务页面);

       //侧滑页面加入到节点树
        decorView.addView(侧滑BGASwipeBackLayout);
       // 业务页面加入到节点树
        侧滑BGASwipeBackLayout.addView(业务页面, 1);

你可能感兴趣的:(微信侧滑关闭实践)