swipeback-Android侧滑返回分析和实现(不高仿微信).zip
Android侧滑返回方案,支持SDK19(Android4.4)及以上。目录示例demo功能介绍实现原理集成方式使用方式注意事项示例demoDemo下载示例效果点此下载 或扫描下面二维码功能介绍支持SDK19(Android4.4)及以上Activity的侧滑返回,同时实现沉浸式状态栏。实现原理侧滑时利用反射将窗口转为透明,结束后再利用反射将窗口还原为不透明。详细分析集成方式在module的build.gradle中添加如下代码 dependencies { implementation 'cn.simonlee.widget:swipeback:1.0.10' }使用方式STEP.1在Activity的styles中配置如下属性<item name="android:windowBackground">@android:color/transparent</item>STEP.2在Activity的onCreate方法中获取SwipeBackHelper实例@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_swipeback); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mSwipeBackHelper = new SwipeBackHelper(this); //设置窗口背景颜色,以覆盖不可见区域的黑色背景(不可见区域常见为当输入法及导航栏变化时的背景) mSwipeBackHelper.setWindowBackgroundColor(getResources().getColor(R.color.colorWindowBackground)); } }STEP.3在Activity的dispatchTouchEvent和onTouchEvent中分发触摸事件,如果仅希望侧边触发,可以不用onTouchEvent@Overridepublic boolean dispatchTouchEvent(MotionEvent event) { if (mSwipeBackHelper != null) { mSwipeBackHelper.dispatchTouchEvent(event); } return super.dispatchTouchEvent(event); }@Overridepublic boolean onTouchEvent(MotionEvent event) { if (mSwipeBackHelper != null) { mSwipeBackHelper.onTouchEvent(event); } return super.onTouchEvent(event); }注意事项Tips.1如需要适配SDK21(Android5.0)以下,必须在styles中配置如下属性。SDK21及以上无需此属性<item name="android:windowIsTranslucent">true</item>Tips.2因状态栏透明,输入法的adjustPan模式不会生效,建议设置为adjustResizeTips.3因状态栏透明,布局会从屏幕顶端开始绘制,需自行调整paddingTop//获取状态栏的高度public int getStatusBarHeight() { int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); try { return getResources().getDimensionPixelSize(resourceId); } catch (Resources.NotFoundException e) { return 0; } }Tips.4侧滑的核心原理是利用反射转换窗口透明,这会影响到下层Activity的生命周期。侧滑过程中窗口转为透明时,下层Activity会被唤醒,进入onStart状态,如果发生屏幕旋转,下层Activity还将会进行重建。当我们将窗口恢复为不透明,下层Activity会重新进入onStop状态。因此如果你的Activity代码逻辑比较混乱,使用之前务必进行逻辑优化。Tips.5当顶层Activity方向与下层Activity方向不一致时侧滑会失效(下层方向未锁定除外),请关闭该层Activity侧滑功能。 示例场景:竖屏界面点击视频,进入横屏播放。Tips.6如需动态支持横竖屏切换(比如APP中有“支持横屏”开关),屏幕方向需指定为behind跟随栈底Activity方向,同时在onCreate中进行判断,若不支持横竖屏切换则锁定屏幕方向(因为经测试SDK21中behind无效)。
- 1
- 2
- 粉丝: 373
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助