View 、ViewGroup事件分发:
1. Touch事件分发中只有两个主角:ViewGroup与view
ViewGroup包含onTnterceptTouchEven,dispathTouchEven,onTouchEven三个相关事件
View包含dispathTouchEven,onTouchEven两个相关事件
2. ViewGroup和View组成了一个树状结构,根节点为Activity内部包含的一个ViewGroup
3. 触摸事件由Action_Down,Action_Move,Action_Up组成,其中一次完整的触摸事件,Down和Up都只有一个,Move有若干个,可以为0个
4. 当Activity接收到Touch事件时,将遍历子view进行Down事件的分发,ViewGroup的遍历可以看成是递归的,分发的目的是为了找到真正要处理本次完成触摸事件的view,这个view会在onTouchEvent返回true
5. 将某个View 返回true时,会终止Down的分发,同时在ViewGroup中记录了改子View,接下来的Move和Up事件将由该子View直接进行处理,由于子View是保存在ViewGroup中的,存在多层ViewGroup的节点结构时,上级ViewGroup保存的会是真实处理的View所在的ViewGroup对象:
如ViewGroup0 ---VIewGroup1 -- TextView 的结构中,TextView返回了true,它将保存在ViewGroup1中,而ViewGroup1也会返回true,保存在ViewGroup0中,当Move和Up事件来时,会先从ViewGrou0传递到ViewGroup1,在由ViewGroup1传递到TextView。
6. 当ViewGroup中所有子View都不捕获Down事件时,将触发ViewGroup自身的onTouch事件,触发时调用super.dispatchTouchEven函数,即父类View的dispatchTouchEvent方法,在所有子View都不处理的情况下,触发Activity的onTouchEven方法
7. onInterceptTouchEvent有两个作用
1)拦截Down事件的分发
2)终止Up和Move事件向目标view传递,使得目标View所在的ViewGroup捕获up和move事件。