看了网上很多博客,还是无法理解安卓分发机制。所以自己上。
上图是总的分发流程示意图,下面做一下说明。
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
如果有说的不对,欢迎大神指正
网友评论