Android 側滑只需一步

先解釋一下這個標題,說的是實現App側滑返回功能只須要一行代碼就能搞定,怎麼作到的我待會會說。側滑所指的就是側滑返回,後面的介紹過程我將用側滑表面其意。請看側滑效果以下圖:

Github地址:0侵入側滑返回android

使用

在 Application 初始化git

SwipeBackHelper.init(this); // 就這一步操做
複製代碼

本篇不打算長篇大論解釋原理,只想跟你們說一下個人思考。 筆者的項目中也有側滑返回功能,和不少側滑的開源項目同樣,須要繼承swipeBackActivity基類,實現控制側滑返回方法。我以爲這是比較乏味的。並且不少側滑框架須要使用透明主題true(默認爲false)github

<item name="android:windowIsTranslucent">true</item>
複製代碼

這個屬性在實際應用中是純在問題的它會引發一系列的動畫問題,如先後臺切換動畫、Activity回退動畫等。還有個值得注意的是在界面跳轉的時候,發起跳轉的Activity只會執行onPause方法,而不會執行onStop方法。bash

因而乎我決定改變這個局面,在這個過程當中我有三個方面的考慮:對項目傾入性高地版本手機適配性主題兼容性。要抓好這三個點,這是個人目的。下面我就這三個方向具細的說框架

傾入性

能不能作到不改動Activity的就能使它擁有側滑的能力?答案是確定的。這裏我用到了ActivityLifeCallbacks技術,須要API 14+onActivityCreated函數裏面動態的把側滑控件植入到佈局最頂級,替換以前的將初始化側滑代碼寫在Activity裏方式。而且動態的判斷是否第二個入棧的Activity若是是再植入。由於第一個啓動的Activity是不須要側滑的,好比咱們的首頁界面。函數

適配性

在適配性方面我但願在高低版本的手機當中側滑效果是同樣的,不會出現閃一下的狀況佈局

改寫swipeBack的時候,遇到在高版本的手機當中側滑結束的時候有概率會閃一下,這讓我非常頭疼不過也得解決啊。因而我找了其餘測滑庫也試試看,我發現一部分也有相同的問題,一部分沒有。因而我進一步分析那些不會閃一下的側滑庫,發現他們它們都有一個共同點,就是必須使用透明主題。這種強制要求對於我來講是不接受的,我必定要解決這個痛點。爲何會閃一下?其實很簡單,由於側滑結束的時候Activity finish會有一個退出動畫,因此你會看到閃一下的場景。那咱們就把退出動畫"取消吧",因而我將退出動畫設置成以下:動畫

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/decelerate_quad">
</set>
ps:這個動畫我是從系統anim裏面當中找出來的
複製代碼

作了以上改動以後發現並無完全解決,雖然閃一下的概率是大大下降了。左四右想我想我用到另一種方式。我在dispatchDraw中將前一個activity界面中的DecorView繪製到當前activity中的畫布上,由於dispatchDraw()方法先執行,那麼它就會將activity A中的DecorView繪製到當前activity B界面上。接着B進入onPause,此時界面上仍然顯示的是B的內容。再接着進入A onStart,此時系統準備A的界面,將A中的DecorView從新繪製到當前A界面中。下來進入A onResume,此時屏幕上顯示A的界面,同時隱藏B的界面。由於A界面和B界面是一樣的內容,因此屏幕的顯示不會有切換效果ui

兼容性

在兼容性方面我但願作到兼容透明主題與非透明主題。this

由於這個兩個選項在每一個項目中都是不固定的,不統一的。不能由於使用了SwipeBack就要改變他,這是不太友好的。應該更好的對待它們,兼容它們。處理這一點我用到了反射技術。反射Activity的convertFromTranslucent方法將透明主題轉爲不透明兼容二者。

總結

以上就是我今天和你們分享的Android側滑Lib,已經使用到個人項目中。也歡迎你們試試看,若是以爲不錯請爲我star!

Github地址:0侵入側滑返回

相關文章
相關標籤/搜索