美文网首页
Touch事件分发理解

Touch事件分发理解

作者: 我弟是个程序员 | 来源:发表于2017-07-23 18:56 被阅读0次
  1. Touch事件分发中只有两个主角:ViewGroup和View。
    ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。
    View包含dispatchTouchEvent、onTouchEvent两个相关事件。

  2. ViewGroup和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup。

  3. 触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有一个,Move有若干个,可以为0个。

  4. 当Acitivty接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup的遍历(深度优先遍历)可以看成是递归的。分发(dispatchTouchEvent)的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent结果返回true。
    ViewGroup的dispatchTouchEvent是真正在执行“分发”工作,它拥有boolean类型的返回值,当返回为true时,顺序下发会中断。而View的dispatchTouchEvent方法,并不执行分发工作,或者说它分发的对象就是自己,决定是否把touch事件交给自己处理,而处理的方法,便是onTouchEvent事件,事实上子View的dispatchTouchEvent方法真正执行的代码是这样的

   public boolean dispatchTouchEvent(MotionEvent ev){
        ....//其他处理,在此不管
        return onTouchEvent(event);
    }

所以对于View,我们 更关心它的onTouchEvent,而不会去认为的设置View的dispatchTouchEvent返回true,我们可以通过在onTouchEvent消费事件的方式来阻止事件的进一步下发。

5.ViewGroup在dispatchTouchEvent后,还会经历一个onInterceptTouchEvent方法,假如我们在某个ViewGroup的onInterceptTouchEvent中,将Action为Down的Touch事件返回true,那便表示将该ViewGroup的所有下发操作拦截掉。

我们编程过程中,对于ViewGroup,事件来说,我们更多的是关注他的事件分发过程,如果在dispatchTouchEvent过程,或是onInterceptTouchEvent返回值为true,代表事件被拦截了,不在下发,只有其自身和其父亲组件有权利消费该事件。这时候,我们就更关心其onTouchEvent事件对Touch的处理了。
对于View来说,我们更关心的是它的onTouchEvent方法,因为其dispatchTouchEvent方法,实际上也是执行了onTouchEvent方法。我们可以通过onTouchEvent来控制View是否消费事件,从而达到控件事件是否继续分发。ps:事件被消费了后,就不会分发了。

相关文章

  • Touch事件分发理解

    Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTou...

  • Android事件分发与消费机制

    一、Touch 事件分析: 事件分发:dispatchTouchEvent return true:事件会分发给当...

  • 有关view的事件分发

    事件分发:用户点击屏幕(view或者viewGroup)产生点击事件(touch事件),touch事件的(发生触摸...

  • Android事件分发

    事件分发的对象是点击事件(touch事件) 当用户触摸手机屏幕的时候就会产生点击事件(Touch事件),touch...

  • 【Android】事件分发机制

    一、事件分发机制过程 Android事件分发机制是Android开发必须掌握的东西,分发的事件是点击Touch事件...

  • Android事件分发

    Touch事件的相关方法 dispatchTouchEvent        事件分发onInterceptTo...

  • Touch分发的结论

    Touch传递 Touch事件先传递到Activity,然后ViewGroup,再传递到View。 Touch分发...

  • Touch事件分发

    Ø public boolean dispatchTouchEvent (MotionEventev) Ø p...

  • View:事件传递流程

    1 Touch事件底层传递过程 Touch的整体派发流程,遵循如下逻辑: Android中Touch事件的分发分服...

  • Android事件分发机制详解

    事件分发对象 (1)所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时...

网友评论

      本文标题:Touch事件分发理解

      本文链接:https://www.haomeiwen.com/subject/idvmkxtx.html