【视图】【事件分发】

事件分发机制

图解 Android 事件分发机制

image.png

简略版:

  1. 在dispatchTouchEvent 和 onTouchEvent返回true则消费事件,停止传递
  2. 维持super则走全流程(1)->(5),6、7在view不消费事件时才会返回到
  3. dispatchTouchEvent和onTouchEvent 若return false则跳到上一层的onTouchEvent
  4. viewGroup的onInterceptTouchEvent若return true则跳过下层至自己的onTouchEvent
  5. View的dispatchTouchEvent默认实现(super)就是把事件分发给自己的onTouchEvent

Activity:dispatchTouchEvent(1)、onTouchEvent(7)
ViewGroup:dispatchTouchEvent(2)、onInterceptTouchEvent(3)、onTouchEvent(6)
View:dispatchTouchEvent(4)、onTouchEvent(5)

对于在onTouchEvent消费事件的情况:在哪个View的onTouchEvent 返回true,那么ACTION_MOVE和ACTION_UP的事件从上往下传到这个View后就不再往下传递了,而直接传给自己的onTouchEvent 并结束本次事件传递过程。
对于ACTION_MOVE、ACTION_UP总结:ACTION_DOWN事件在哪个控件消费了(return true), 那么ACTION_MOVE和ACTION_UP就会从上往下(通过dispatchTouchEvent)做事件分发往下传,就只会传到这个控件,不会继续往下传,如果ACTION_DOWN事件是在dispatchTouchEvent消费,那么事件到此为止停止传递,如果ACTION_DOWN事件是在onTouchEvent消费的,那么会把ACTION_MOVE或ACTION_UP事件传给该控件的onTouchEvent处理并结束传递。

太长版:

  1. 如果我们没有对控件里面的方法进行重写或更改返回值,而直接用super调用父类的默认实现,那么整个事件流向应该是从Activity---->ViewGroup--->View 从上往下调用dispatchTouchEvent方法,一直到叶子节点(View)的时候,再由View--->ViewGroup--->Activity从下往上调用onTouchEvent方法。
  2. dispatchTouchEvent 和 onTouchEvent 一旦return true,事件就停止传递了(到达终点)(没有谁能再收到这个事件)。看下图中只要return true事件就没再继续传下去了,对于return true我们经常说事件被消费了,消费了的意思就是事件走到这里就是终点,不会往下传,没有谁能再收到这个事件了。
  3. dispatchTouchEvent 和 onTouchEvent return false的时候事件都回传给父控件的onTouchEvent处理
  4. dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent
    ViewGroup 和View的这些方法的默认实现就是会让整个事件安装U型完整走完,所以 return super.xxxxxx() 就会让事件依照U型的方向的完整走完整个事件流动路径),中间不做任何改动,不回溯、不终止,每个环节都走到。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 概述   作为Android开发中最常见的一个控件,个人觉得有必要谈谈了。我们刚开始接触Android的时候...
    忆念成风阅读 8,393评论 2 16
  • 关于Android 事件分发机制,我根据画的一张事件分发流程图,说明的事件从用户点击之后,在不同函数不同返回值的情...
    StChris阅读 4,247评论 0 6
  • 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分...
    Jwennnnnnnnnn阅读 9,347评论 9 63
  • 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分...
    Kelin阅读 287,015评论 283 1,776
  • 因为大学读的是中文系,所以每每和人聊起都会收获一分诧异的目光。仿佛我的存在颠覆了他们对学中文人的一贯印象。有吗?也...
    左佳妮阅读 1,761评论 0 2