剛忙完一段時間,今天剛清閑會,就把以前寫的東西整理整理。于是冥冥中發現有些東西完全可以共享出來,畢竟那麼常見,而且簡單實用。
其實側滑關閉activity在網上也有大量的文章去介紹他,我也有去看,要麼是代碼實在太多看不下去,要麼就是跑了項目沒有反應的。唯一的方法還是自己随手魯一個~,側滑這個東西在android中是比較少見的,ios是最常見不過了,因為畢竟他們沒有實體傳回鍵。還有UIScrollView那些。然而我們用的最多的QQ也隻是有個功能,并沒有真正的滑動效果。至于微信的,我記得N久以前滑出了一個bug。也沒什麼印象了。估計也是極小的機率事件。于是,當初我就強行的魯了一個。下面我們一步步分析實作的思路以及代碼。
首先來看下我們一些簡單的定義:
這邊我已經注釋過了,就不做過多就寫了。接下來,我們看下我們的一些初始化已經外部調用方法:
我們主要看下bindactivity這個方法。這個是我們用來綁定一個activity的。這個activity你們可以基于baseactivity實作一個backactivity。為什麼要這麼做,因為你每個activity都要寫這麼一句話,我感覺就是浪費時間,一個基類直接解決。這個activity我們可以這麼寫:

那麼接下來我們看下,如果對手勢的處理讓他側滑關閉呢?
首先我們在ACTION_DOWN記錄按下點的X坐标
然後在ACTION_MOVE中判斷,如果我們getScrollX() + rightMovedX是否是大于0的,如果大于0,表示Activity處于滑動狀态,并且是向左滑動,同時我們進行了判斷,手指處于螢幕邊緣時不可以滑動。
最後在ACTION_UP中判斷如果手指滑動的距離大于布局寬度的1/3,表示将Activity滑出界面,否則滑動到起始位置,我們利用Scroller類的startScroll()方法設定好開始位置,滑動距離和時間,然後調用postInvalidate()重新整理界面,之後就到computeScroll()方法中,我們利用scrollTo()方法對該布局的父布局進行滾動,滾動結束之後,我們判斷界面是否滑出界面,如果是那就劃出頁面讓activity finish掉。否則,布局就歸位。
其實使用方法很簡單,直接繼承SWBackActivity就可以了。那麼我們最後來看下效果圖:
推薦閱讀
仿bilibili重新整理按鈕的實作
一個精緻的打勾小動畫
帶你實作漂亮的滑動卷尺