天天看點

Android 事件分發 dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent1.onInterceptTouchEvent2.dispatchTouchEvent3.onTouchEvent

Android中整個touch事件的分發流程:

手指點選螢幕 --> 螢幕驅動通知linux系統  --->  系統通知WindowManagerService(WMS) --> WMS分發給Activity -->  Activity再分發給view

1.onInterceptTouchEvent

onInterceptTouchEvent是viewGroup中的方法,非ViewGroup是沒有的。該方法有個 boolean類型的傳回值,當傳回false(預設值)的時候,則表示将touch事件繼續向下分發給子view。如果傳回true則不再将事件分發,意思就是子view不會接收到touch事件

2.dispatchTouchEvent

dispatchTouchEvent是View中的方法,即所有的view都擁有此方法。dispatchTouchEvent的作用是事件分發。

在ViewGroup中重寫了dispatchTouchEvent方法,普通的view中直接判斷onTouchEvent傳回是否為true,如果為true則dispatchtouchEvent也為true。但viewGroup中卻不是,viewGroup中會先去調用onInterceptTouchEvent傳回是否為true,如果不為true,則會去分發子控件中的touch事件,如果事件被子控件消費了,那麼它會傳回true,且不會調用自己的onTouchEvent方法

假如,該view的dispatchtouchEvent方法傳回了false,那麼該view在這次touch事件中将不會再被調用,包括該view的子view。

3.onTouchEvent

ontouchEvent是對touch事件的消費,整個調用鍊中,隻會有一個view的onTouchEvent方法會被執行,誰消費了就誰執行,如果onInterceptTouchEvent不攔截子view,那麼就會由子view先決定是否進行消費,子view不消費才會輪到上層view去消費。