View和ViewGroup关系
Activity、viewgroup、view事件分发机制顺序三者关系
整个事件流向是一个类U型图注:
- 仔细看的话,图分为3层,从上往下依次是Activity、ViewGroup、View事件从左上角那个白色箭头开始,由Activity的dispatchTouchEvent做分发箭头的上面字代表方法返回值,return true、return false、return super.xxxxx(),super的意思是调用父类实现。
- dispatchTouchEvent和onTouchEvent的框里有个【true---->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止。
目前所有的图的事件是针对ACTION_DOWN的 - 只有return super.dispatchTouchEvent(ev) 才是往下走,返回true 或者 false事件就被消费了(终止传递)。
对于ACTION_MOVE和ACTION_UP
-
如果在某个控件的dispatchTouchEvent 返回true消费终结事件,那么收到ACTION_DOWN 的函数也能收到 ACTION_MOVE和ACTION_UP。
小结
- Android中事件传递按照从上到下进行层级传递,事件处理从Activity开始到ViewGroup再到View。
- 事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewGroup才有的方法。这三个方法的作用分别是负责事件分发、事件处理、事件拦截。
- onTouch事件要先于onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent要后于dispatchTouchEvent方法的调用。
如有不妥之处,请指点
参考地址
View 的事件分发机制(Android 开发艺术探索读书笔记)
图解 Android 事件分发机制-文/Kelin(简书作者)
2016年12月28日10:23:17
网友评论