看了網上很多博客,還是無法理解安卓分發機制。所以自己上。
上圖是總的分發流程示意圖,下面做一下說明。
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
如果有說的不對,歡迎大神指正