摘要:右滑關(guān)閉簡介很多中都會有右滑關(guān)閉功能,尤其是在全面屏?xí)r代更顯得尤為重要,但是,禁止非全屏的使用透明主題,否則會引發(fā)這導(dǎo)致了體驗(yàn)最優(yōu)的右滑關(guān)閉方案則不能再使用,除非有微信那種黑科技。
SlidingShut 右滑關(guān)閉 簡介
很多APP中都會有右滑關(guān)閉功能,
尤其是在全面屏?xí)r代更顯得尤為重要,
但是,
Android 8.0禁止非全屏的Activity使用透明主題,
否則會引發(fā):
Only fullscreen opaque activities can request orientation
這導(dǎo)致了體驗(yàn)最優(yōu)的右滑關(guān)閉方案則不能再使用,
除非有微信那種黑科技。
手機(jī)QQ的右滑關(guān)閉雖然不需要透明主題,
但是沒有實(shí)時反饋,
體驗(yàn)巨差,
那么就沒有其他的選擇了嗎?
于是我總結(jié)了一下,
目前最多的有兩種右滑方案:
優(yōu)點(diǎn)1:2、以QQ為代表的滑動方向計算
界面移動跟隨手指,
實(shí)時反饋。優(yōu)點(diǎn)2:
擬物化,
層級明確,
視覺體驗(yàn)好。
———————————
缺點(diǎn)1:
由于涉及到滑動速度,
要滑多快才會觸發(fā)關(guān)閉,
這閾值永遠(yuǎn)是個未知數(shù),
再加上使用右滑關(guān)閉的App越來越多,
每個App的這個閾值都不一樣,
無形中增加了關(guān)閉失敗的幾率
以及用戶的思考成本。缺點(diǎn)2:
需要透明主題,
不僅有可能會擾亂上一個Activity的生命周期,
而且SDK 27中非全屏Activity不可用,
否側(cè)會crash。
優(yōu)點(diǎn):
不需要透明主題
———————————
缺點(diǎn)1:
沒有任何反饋,
用戶無法知道當(dāng)前手勢是否可以觸發(fā)關(guān)閉,
誤觸率高。缺點(diǎn)2:
反應(yīng)遲鈍,
由于需要手勢完成才能獲得完整手勢,
所以手指抬起后才會觸發(fā)關(guān)閉,
雖然微信也是抬起后關(guān)閉,
但是視覺上和心理上卻不存在此缺點(diǎn)。
不過有個稍優(yōu)點(diǎn)的方案,
實(shí)時計算手勢的,
反應(yīng)靈敏了許多,
但卻會增加誤觸幾率。缺點(diǎn)3:
沒有層級感,
更不擬物化。
那么有沒有其他的方案,
既不需要透明主題,
又能實(shí)時反饋?
當(dāng)然,
既然我寫了這篇帖子,
那么當(dāng)然會給大家提供一種方案。
優(yōu)點(diǎn)1:
不需要透明主題。優(yōu)點(diǎn)2:
界面跟隨手指,
實(shí)時反饋,
會不會關(guān)閉用戶一目了然。優(yōu)點(diǎn)3:
擬物化,
視覺體驗(yàn)好。
———————————
缺點(diǎn):
沒有微信的那種方案層級感強(qiáng)。
廢話不多說,
這就給大家展示一下效果吧:
顧名思義
滑動過程中圓環(huán)進(jìn)度條跟隨手指而充盈
當(dāng)圓環(huán)圓滿后
抬起手指后才會觸發(fā)finish();
想要使用抬起模式
調(diào)用以下代碼即可:
setUpFinish(true);
(注:默認(rèn)為true,即默認(rèn)抬起模式)二、即刻模式
與抬起模式相對應(yīng)
只要圓環(huán)圓滿就觸發(fā)finish();
相比來說
即刻模式更敏捷
但卻存在誤觸的情況
選擇適合自己的
想要使用抬起模式
調(diào)用以下代碼即可:
setUpFinish(false);三、兼容finish()被攔截的情況
當(dāng)Activity中finish()方法被攔截時
已經(jīng)移動的界面自動歸位
歸位后自動重新開啟右滑關(guān)閉
看了上面幾個動圖
心細(xì)的朋友可能發(fā)現(xiàn)了
在界面移動時
Activity左上角出現(xiàn)了一個白條條
這是因?yàn)門itleBar的顏色和界面的顏色不一致導(dǎo)致的
雖說無傷大雅
但作為一個視覺主義的程序員
這個小細(xì)節(jié)也是要優(yōu)化的
所以我提供了只移動指定View功能
就是說不會整個界面都移動
你讓他動的才會動
想要指定滑動View
調(diào)用以下代碼即可:
setMoveView(rootView);五、圓環(huán)顏色自定義
不管是出于性能
還是出于可擴(kuò)展性
這個圓環(huán)進(jìn)度條是完全用Canvas畫出來的
所以顏色當(dāng)然是支持自定義的
比如界面背景色不是白色
而是主題色時
想要指定圓環(huán)顏色
調(diào)用以下代碼即可:
int color = ContextCompat.getColor(context, R.color.white); setProgressColor(color);
塵少老規(guī)矩,附源碼:
https://github.com/Bamboy1203...
也可以先掃碼下載apk安裝體驗(yàn):
同時歡迎加入技術(shù)探討QQ群:569614530
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74174.html
閱讀 3434·2021-11-12 10:36
閱讀 2754·2021-11-11 16:55
閱讀 2974·2021-09-27 13:36
閱讀 1625·2021-08-05 10:01
閱讀 3566·2019-08-30 15:55
閱讀 780·2019-08-30 13:01
閱讀 1917·2019-08-29 17:16
閱讀 2388·2019-08-29 16:40