Android-三張圖搞定Touch事件傳遞機制
阿新 • • 發佈:2019-01-01
上圖之前先講下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.事件攔截