SlidingShut 右滑关闭简介很多APP中都会有右滑关闭功能, 尤其是在全面屏时代更显得尤为重要, 但是, Android 8.0禁止非全屏的Activity使用透明主题, 否则会引发:Only fullscreen opaque activities can request orientation这导致了体验最优的右滑关闭方案则不能再使用, 除非有微信那种黑科技。 手机QQ的右滑关闭虽然不需要透明主题, 但是没有实时反馈, 体验巨差, 那么就没有其他的选择了吗? 于是我总结了一下, 目前最多的有两种右滑方案:1、以微信为代表的透明方案优点1: 界面移动跟随手指, 实时反馈。 优点2: 拟物化, 层级明确, 视觉体验好。 ——————————— 缺点1: 由于涉及到滑动速度, 要滑多快才会触发关闭, 这阈值永远是个未知数, 再加上使用右滑关闭的App越来越多, 每个App的这个阈值都不一样, 无形中增加了关闭失败的几率 以及用户的思考成本。 缺点2: 需要透明主题, 不仅有可能会扰乱上一个Activity的生命周期, 而且SDK 27中非全屏Activity不可用, 否侧会crash。2、以QQ为代表的滑动方向计算优点: 不需要透明主题 ——————————— 缺点1: 没有任何反馈, 用户无法知道当前手势是否可以触发关闭, 误触率高。 缺点2: 反应迟钝, 由于需要手势完成才能获得完整手势, 所以手指抬起后才会触发关闭, 虽然微信也是抬起后关闭, 但是视觉上和心理上却不存在此缺点。 不过有个稍优点的方案, 实时计算手势的, 反应灵敏了许多, 但却会增加误触几率。 缺点3: 没有层级感, 更不拟物化。那么有没有其他的方案, 既不需要透明主题, 又能实时反馈? 当然, 既然我写了这篇帖子, 那么当然会给大家提供一种方案。3:Bamboy右滑关闭方案优点1: 不需要透明主题。 优点2: 界面跟随手指, 实时反馈, 会不会关闭用户一目了然。 优点3: 拟物化, 视觉体验好。 ——————————— 缺点: 没有微信的那种方案层级感强。废话不多说, 这就给大家展示一下效果吧:一、抬起模式顾名思义 滑动过程中圆环进度条跟随手指而充盈 当圆环圆满后 抬起手指后才会触发finish(); 想要使用抬起模式 调用以下代码即可:setUpFinish(true); (注:默认为true,即默认抬起模式)二、即刻模式与抬起模式相对应 只要圆环圆满就触发finish(); 相比来说 即刻模式更敏捷 但却存在误触的情况 选择适合自己的 想要使用抬起模式 调用以下代码即可:setUpFinish(false); 三、兼容finish()被拦截的情况当Activity中finish()方法被拦截时 已经移动的界面自动归位 归位后自动重新开启右滑关闭 四、指定滑动View看了上面几个动图 心细的朋友可能发现了 在界面移动时 Activity左上角出现了一个白条条 这是因为TitleBar的颜色和界面的颜色不一致导致的 虽说无伤大雅 但作为一个视觉主义的程序员 这个小细节也是要优化的 所以我提供了只移动指定View功能 就是说不会整个界面都移动 你让他动的才会动 想要指定滑动View 调用以下代码即可:setMoveView(rootView); 五、圆环颜色自定义不管是出于性能 还是出于可扩展性 这个圆环进度条是完全用Canvas画出来的 所以颜色当然是支持自定义的 比如界面背景色不是白色 而是主题色时 想要指定圆环颜色 调用以下代码即可:int color = ContextCompat.getColor(context, R.color.white); setProgressColor(color); 尘少老规矩,附源码: https://github.com/Bamboy1203…也可以先扫码下载apk安装体验: 同时欢迎加入技术探讨QQ群:569614530