Android事件分发

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事件。

上一篇:android-创建新视图时动态隐藏视图


下一篇:mvvm 请谨慎复用view