不少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