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