1. 程式人生 > >Android-三張圖搞定Touch事件傳遞機制

Android-三張圖搞定Touch事件傳遞機制

上圖之前先講下Android事件的基礎知識:

1.所有的Touch事件都封裝到MotionEvent裡面

2.事件處理包括三種情況,分別為:傳遞—-dispatchTouchEvent()函式、攔截——onInterceptTouchEvent()函式、消費—-onTouchEvent()函式和OnTouchListener

3.事件型別分為ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL等,每個事件都是以ACTION_DOWN開始ACTION_UP結束

Android事件傳遞流程:

1.事件都是從Activity.dispatchTouchEvent()開始傳遞

2.事件由父View傳遞給子View,ViewGroup可以通過onInterceptTouchEvent()方法對事件攔截,停止其向子view傳遞

3.如果事件從上往下傳遞過程中一直沒有被停止,且最底層子View沒有消費事件,事件會反向往上傳遞,這時父View(ViewGroup)可以進行消費,如果還是沒有被消費的話,最後會到Activity的onTouchEvent()函式。

4.如果View沒有對ACTION_DOWN進行消費,之後的其他事件不會傳遞過來,也就是說ACTION_DOWN必須返回true,之後的事件才會傳遞進來
5.OnTouchListener優先於onTouchEvent()對事件進行消費

效果圖如下:

1.View不處理事件流程圖(View沒有消費事件)
這裡寫圖片描述

2.View處理事件
這裡寫圖片描述

3.事件攔截
這裡寫圖片描述