前言
本次项目基于bingoogolapple/BGASwipeBackLayout-Android进行二次修改,优化了对国产手机导航栏的适配(比如oppo r7)、优化了侧滑的粘手体验、优化了侧滑的底图渲染逻辑。
特性
类似微信侧滑关闭,伴随着当前activity右滑出场,底部的activity左侧入场。
思路简析
我们首先对比下,对于一个Activity,开启侧滑关闭后,节点树发生了什么变化


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