Bamboy右滑關閉2.0,無需透明主題的右滑關閉(附源碼)

SlidingShut 右滑關閉

簡介

不少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。優化

二、以QQ爲表明的滑動方向計算

優勢:
不須要透明主題
———————————
缺點1:
沒有任何反饋,
用戶沒法知道當前手勢是否能夠觸發關閉,
誤觸率高。

缺點2:
反應遲鈍,
因爲須要手勢完成才能得到完整手勢,
因此手指擡起後纔會觸發關閉,
雖然微信也是擡起後關閉,
可是視覺上和心理上卻不存在此缺點。
不過有個稍優勢的方案,
實時計算手勢的,
反應靈敏了許多,
但卻會增長誤觸概率。 spa

缺點3:
沒有層級感,
更不擬物化。code

那麼有沒有其餘的方案,
既不須要透明主題,
又能實時反饋? 生命週期

固然,
既然我寫了這篇帖子,
那麼固然會給你們提供一種方案。rem

3:Bamboy右滑關閉方案

優勢1:
不須要透明主題。

優勢2:
界面跟隨手指,
實時反饋,
會不會關閉用戶一目瞭然。

優勢3:
擬物化,
視覺體驗好。
———————————
缺點:
沒有微信的那種方案層級感強。

廢話很少說,
這就給你們展現一下效果吧:

1、擡起模式

顧名思義
滑動過程當中圓環進度條跟隨手指而充盈
當圓環圓滿後
擡起手指後纔會觸發finish();

想要使用擡起模式
調用如下代碼便可:

setUpFinish(true);
(注:默認爲true,即默認擡起模式)

擡起模式

2、即刻模式

與擡起模式相對應
只要圓環圓滿就觸發finish();
相比來講
即刻模式更敏捷
但卻存在誤觸的狀況
選擇適合本身的

想要使用擡起模式
調用如下代碼便可:

setUpFinish(false);

即刻模式

3、兼容finish()被攔截的狀況

當Activity中finish()方法被攔截時
已經移動的界面自動歸位
歸位後自動從新開啓右滑關閉

finish()被攔截

4、指定滑動View

看了上面幾個動圖
心細的朋友可能發現了
在界面移動時
Activity左上角出現了一個白條條
這是由於TitleBar的顏色和界面的顏色不一致致使的
雖然說無傷大雅
但做爲一個視覺主義的程序員
這個小細節也是要優化的
因此我提供了只移動指定View功能
就是說不會整個界面都移動
你讓他動的纔會動

想要指定滑動View
調用如下代碼便可:

setMoveView(rootView);

指定View

5、圓環顏色自定義

不論是出於性能
仍是出於可擴展性
這個圓環進度條是徹底用Canvas畫出來的
因此顏色固然是支持自定義的
好比界面背景色不是白色
而是主題色時

想要指定圓環顏色
調用如下代碼便可:

int color = ContextCompat.getColor(context, R.color.white);  
setProgressColor(color);

彩色背景

塵少老規矩,附源碼:
https://github.com/Bamboy1203...

也能夠先掃碼下載apk安裝體驗:
fir_right.jpg同時歡迎加入技術探討QQ羣:569614530

相關文章
相關標籤/搜索