View的事件分發機制分析

utf發表於2018-01-05

以一個簡單的demo來分析事件分發機制,點選textView以後,控制檯列印的事件。

View的事件分發機制分析
View的事件分發機制分析

事件傳輸順序

一個事件序列:表示手指第一次touch螢幕DOWN直到手指離開螢幕UP,期間一些列事件ACTION

一個點選事件產生以後,他的傳輸過程以這個順序傳輸: Activity -> Window(PhoneWindow) -> (DecorView)-> ViewGroup -> View 可以看到事件傳輸由dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent 3個方法共同作用的。

dispatchTouchEvent(MotionEvent ev)

對事件進行分發,view一旦接收到事件就會呼叫它,由它來對事件進行分配,它的返回結果代表是否事件被消費。若該view的onTouchEvent返回true,或者它的子view們的dispatchTouchEvent返回true,則返回true。

onInterceptTouchEvent(MotionEvent ev)

攔截事件,返回結果為ture的時候表示攔截該事件,事件(包括同一個事件序列)不會往下傳遞全部交由它處理,並且在同一個事件序列裡不在呼叫這個方法。會直接呼叫該viewGroup的onTouchEvent,如果onTouchEvent返回true,代表事件被消費,如果為false,則事件將向上傳遞,如果一直沒被消費則由Activit消費此事件。

onTouchEvent(MotionEvent event)

由dispatchTouchEvent裡面呼叫,用於處理事件,返回false, 代表不消費事件,並且不再接收同一個事件序列的事件。

相關文章