Android事件分發機制

事件分發.png

看了網上很多博客,還是無法理解安卓分發機制。所以自己上。
上圖是總的分發流程示意圖,下面做一下說明。
1.ACTION_DOWN事件傳遞的回路是這樣的:
Activity.dispatchTouchEvent—>ViewGoup.dispatchTouchEvent
—>ViewGroup.onInterceptTouchEvent—>View.dispatchTouchEvent
—>View.onTouchEvent—>ViewGroup.onTouchEvent—>Activity.onTouchEvent
2.在此回路中,任何onTouchEvent返回true,則表示事件消費,之后的路線不再走
3.如果ViewGroup.onInterceptTouchEvent返回true,表示該ViewGroup需要攔截該事件,事件不會往子View傳遞。回路變成:Activity.dispatchTouchEvent
—>ViewGoup.dispatchTouchEvent—>ViewGroup.onInterceptTouchEvent
—>ViewGroup.onTouchEvent—>Activity.onTouchEvent
同樣,若onTouchEvent返回true,結束該流程
4.若ViewGroup.onTouchEvent或View.onTouchEvent的ACTION_DOWN沒有返回true,則之后ACTION_UP和ACTION_MOVE將不傳入。
5.ViewGroup與View的dispatchTouchEvent方法若返回true,則表示消費,直接終止回路。若返回false,則直接跳到上一級的onTouchEvent,跳過中間回路部分。
即如果View.dispatchTouchEvent返回false,則回路是Activity.dispatchTouchEvent—>ViewGoup.dispatchTouchEvent
—>ViewGroup.onInterceptTouchEvent—>View.dispatchTouchEvent
—>ViewGroup.onTouchEvent—>Activity.onTouchEvent
如果ViewGroup.dispatchTouchEvent返回false,則回路是Activity.dispatchTouchEvent—>ViewGoup.dispatchTouchEvent
—>ViewGroup.onInterceptTouchEvent—>View.dispatchTouchEvent
—>Activity.onTouchEvent

如果有說的不對,歡迎大神指正

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容