Android右滑關閉Activity介面功能-自定義控制元件實現

weixin_34054866發表於2018-02-12

引言

Android右滑關閉Activity介面功能,網上已經有好多優秀的開原始碼和專案,不過大部分都是結合ViewDragHelper來實現的,這裡要討論的是通過結合ValueAnimator來實現,目前我的控制元件只實現了從左往右(上往下)滑關閉介面。

需求

  • 在介面上從左往右滑,View位置根據手勢移動。
  • 只攔截左右滑動,上下方向的滑動無影響。
  • 子View的左右滑動事件無影響。

預覽圖

4111431-e94eaf9e8eb4e7f7
image

實現思路

  • SwipeBackLayout:左右滑動View
  • onInterceptTouchEvent:該方法只要做左右移動攔截,上下移動不攔截。
  • ValueAnimator:該動畫只要改變SwipeBackLayout View的位置,在ACTION_UP和介面開啟時呼叫。
  • ACTION_MOVE時,根據移動的X位移,修改SwipeBackLayout View的位置。

主要程式碼分析

onFinishInflate

4111431-41be0876124305a8
image

該方法只要實現兩種方式,一種是通過佈局xml檔案來初始化SwipeBackLayout;另外一種是新new SwipeBackLayout。

onLayout

4111431-832475c0c80d59a1
image

4111431-cae1c44ae6faf3a0
image

該方法只要是在初始化成功之後,修改SwipeBackLayout的位置。

onInterceptTouchEvent

4111431-710c11bba7c88d43
image

4111431-b7ba883e7aedb278
image

該方法只要是攔截左右移動和判斷是否在左右不攔截的子View集合裡面。

onTouchEvent

4111431-e192e291d83f3c7d
image

該方法只要在使用者左右移動的時候,修改SwipeBackLayout的位置。

4111431-1e520511e226d8bf
image

4111431-da9733d1fa183df3
image

該方法只要是ACTION_UP的時候,需要判斷當前SwipeBackLayout的left位置,如果left位置小於螢幕的一半,則使用ValueAnimator動畫,讓SwipeBackLayout位置還原到正常位置。否則,關閉SwipeBackLayout。

dispatchDraw

4111431-a7d54ab12b91058f
image

該方法只要是在SwipeBackLayout移動的時候,繪畫陰影。

原始碼

具體的程式碼和呼叫Demo,可到原始碼地址處檢視:https://github.com/zhangliangming/SwipeBackLayout.git

最後

如果有問題,可到github上面留言。

相關文章