美文网首页
Touch事件分发的分析

Touch事件分发的分析

作者: cao苗子 | 来源:发表于2019-08-02 10:19 被阅读0次

分析一:

先看:activity_main.xml

activity_main.xml

新建 TouchView.java 继承 View,实现onTouchEvent()方法和dispatchTouchEvent()方法

TouchView.java

新建 TouchViewGroup.java 继承 LinearLayout,实现onTouchEvent()方法和dispatchTouchEvent()方法和onInterceptTouchEvent()方法。

TouchViewGroup.java

最后是 MainActitivity的代码

然后运行看下日志输出情况:

log

通过查看日志我们得出 touch的 执行顺序为:

针对父容器TouchViewGroup:ViewGroup.dispatchTouchEvent.DOWN ==> ViewGroup.onInterceptTouchEvent.DOWN 

针对TouchView:View.dispatchTouchEvent.DOWN ==> View.onTouch.DOWN==>View.onTouchEvent.DOWN

针对父容器TouchViewGroup:ViewGroup.dispatchTouchEvent.UP ==> ViewGroup.onInterceptTouchEvent.UP 

针对TouchView:View.dispatchTouchEvent.UP==> View.onTouch.UP==>View.onTouchEvent.UP==>View.onClick

如果我们把TouchView的onClick注释掉呢?执行的顺序又是怎么样呢?来,我们看下日志的输出:

log.2

看日志的输出结果:
针对TouchViewGroup:ViewGroup.dispatchTouchEvent.DOWN ==>ViewGroup.onInterceptTouchEvent.DOWN

针对TouchView:View.dispatchTouchEvent.DOWN==>View.onTouch.DOWN==> View.onTouchEvent.DOWN

针对TouchViewGroup:ViewGroup.onTouch.DOWN==>ViewGroup.onTouchEvent.DOWN==>
ViewGroup.dispatchTouchEvent.UP==>ViewGroup.onTouch.UP==>ViewGroup.onTouchEvent.UP==>ViewGroup.onClick

大家发现和第一次有什么区别了吗?当TouchView和TouchViewGroup都设置了onClick事件之后,如果点击的地方覆盖了,TouchViewGroup的点击事件不会被执行。

如果我们在TouchView的onTouch事件中返回true呢?看下日志输出情况:

log

发现onclick事件没有被执行,有没有发现?我们来分析下这种情况:
所有触摸事件都会执行 view中的dispatchTouchEvent()这个事件 看下这个方法中的代码我们发现
有这么一段代码:

ListenerInfo 是一个监听集合类,result 默认 为 false 。因为我们设置 onTouchListener 所以这里的 li.onTouchListener肯定不会空,当用户点击的时候 就会执行这个代码 li.onTouchListener.onTouch(this,event)然后回调到onTouch()发放中,这个方法默认返回 false,因此这个if()是进不去的,result得到的值就是 false。但是我们在onTouch的回调中 手动设置返回了 true,所以li.onTouchListener.onTouch(this,event) 得到的就是 true。此时result会被赋值为 true。导致 onTouchEvent(event)就不会在执行了。我们看下 onTouchEvent(event) 里面的代码:
public boolean onTouchEvent(MotionEvent event)==》public boolean performClick()。可能不同版本的api不一样,但是都离不开这两个方法,大家可以找一下,我这里就直接贴出来了。

不难发现,onClick()事件在这里回调执行。到这里就验证了 如果在 onTouch()事件中返回false,onClick()事件才会被执行,如果返回true,则不会执行。

相关文章

  • Android事件分发与消费机制

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

  • Touch事件分发的分析

    分析一: 先看:activity_main.xml 新建 TouchView.java 继承 View,实现onT...

  • Android事件分发

    1.前言 Android touch事件分发有几个方向可以深入分析 touch事件是如何从驱动层传递给Framew...

  • Android ViewGroup事件分发

    上篇文章已经分析了Android的Touch事件分发。如果没看的建议先看一下。Android View的Touch...

  • 有关view的事件分发

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

  • Android事件分发

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

  • 【Android】事件分发机制

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

  • Android事件分发

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

  • View的Touch事件分发

    1. 说明 这节课我们就来分析系View的Touch事件分发的顺序。 2. 分析 现象一:onTouc...

  • View:事件传递流程

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

网友评论

      本文标题:Touch事件分发的分析

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