在一些复杂布局中,经常会遇到事件冲突,事件失效等问题,这就需要我们深入理解Android事件的分发传递机制。最好的方法是自己写一个demo,打印事件相关的日志查看其运行流程,然后再结合源码去深入理解。当然这里不会做这些,这里只有总结性的东西,如果你喜欢这种东西,那么请继续往下看。

老规矩,先上图:

用户的交互一般发生在触摸屏上,因此Android事件的传递必然涉及到ViewGroup和View,ViewGroup与View包含的处理事件传递的方法分别如下:

ViewGroup:

<span style="font-size:14px;">public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event)
public boolean onInterceptTouchEvent(MotionEvent event)</span>

View:

<span style="font-size:14px;">public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event) </span>

其中dispatchTouchEvent负责事件分发,onTouchEvent负责事件处理,onInterceptTouchEvent负责事件拦截。可以看到,只有ViewGroup才拥有onInterceptTouchEvent方法。

了解完事件相关的基本方法后,来看一些关键点:

1.Android事件的传递顺序:Activity--->ViewGroup--->View。

2.如果dispatchTouchEvent中返回true,则不再往下继续分发,事件取消;返回false,则继续传递事件。

3.如果ViewGroup的onInterceptTouchEvent返回true,则表示拦截事件,故不再往下传递给View,交给ViewGroup自身处理;如果返回false,则继续传递给View。

4.如果onTouchEvent返回true,则表示其消费掉事件,但不会响应onClickListener;如果返回false,则会继续响应onClickListener,如果有设置过的话。

5.其他的可以参考上图中的具体描述。

图片会说话系列之Android事件的分发传递机制相关推荐

  1. Android Activity 和 ViewGroup中事件触发和传递机制

     在Android中,Activity和View都能接收触摸和按键事件,如果响应事件只需要在继承类里复写事件函数即可. 1.在只有Activity的情况: 1)Touch事件触发流程: 首先触发d ...

  2. Android事件分发之ACTION_CANCEL机制及作用

    目录 ACTION_CANCEL产生场景 ACTION_CANCEL作用 FLAG_DISALLOW_INTERCEPT的作用 如果要查看ACTION_MOVE与ACTION_UP的事件传递机制,查看 ...

  3. Android 触摸事件(Touch)的传递机制

    Touch 事件的传递机制 一个完整的touch 事件,由一个 down 事件.n 个 move 事件,一个 up 事件组成. Touch 事 件 一 般 的 传 递 流 程 Activity--&g ...

  4. Android事件分发之ACTION_MOVE与ACTION_UP的传递机制

    目录 引言 ACTION_MOVE与ACTION_UP的传递机制 mFirstTouchTarget作用 mFirstTouchTarget为什么是链表结构 引言 关于Android事件分发机制网上相 ...

  5. Android之Android触摸事件传递机制

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53431274 本文出自:[顾林海的博客] ##前言 关于Android ...

  6. Android事件分发机制详解及解决文案:史上最全面、最易懂

    点击屏幕Android事件是如何传递,先上图然后再源码解读 源码解读 当用户触摸屏幕首先由当前Activity来分发 public class TouchEventActivity extends A ...

  7. Anroid View事件响应机制和ViewGroup的事件响应分发机制

    注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...

  8. android点击事件的优先级,Android事件体系全面总结+实践分析,系列篇

    前言 在这一个月里,我利用闲余的时间看了下最近Android职业发展这块该怎么选择?这个问题各位大神的回答都非常透彻,相信对大家或多或少都在一定程度上有很大的帮助,今天在这里写这篇文章更多的是想以我开 ...

  9. 总结系列——聊聊android里面的事件分发

    前言 android 中的事件分发,已经是老生常谈的问题了,一般都是从Activity开始聊,但是真的是这样吗?hongyang大神之前一篇纠错,解决了我一个很大的困惑,也算是扫盲吧,这篇文章,是从头 ...

  10. 【Android开发坑系列】之事件

    总结一下: 1.Touch事件分发中只有两个主角: ViewGroup和View. ViewGroup包含onInterceptTouchEvent.dispatchTouchEvent.onTouc ...

最新文章

  1. mysql遵循acid_mysql关系型数据库遵循ACID规则
  2. IP地址修改后ORACLE不能使用问题
  3. JavaScript的文档窗口事件
  4. PuTTY 命令行改进 有效解决 中文乱码
  5. java中Locks的使用
  6. 新版kali安装beef-xss一大堆报错解决办法
  7. NOTEPAD大神是否鄙视一切IDE?
  8. a算法和a*算法的区别_游戏寻路中 A* 算法的改进
  9. linux下通过ping命令监控网络抖动脚本
  10. Virtual Private Network(虚拟专用网络隧道)详解
  11. springboot毕设项目自驾旅游网站的设计与实现gah85(java+VUE+Mybatis+Maven+Mysql)
  12. Bitbucket 添加ssh密钥
  13. 如何在Google Chrome中手动设置位置信息
  14. 微型计算机控制数字量输入输出,计算机控制系统输入/输出通道
  15. Vue:把组件作为自定义元素来使用以及Identifier ' simple_couter' is not in camel case问题解决
  16. Linux-vim设置
  17. socket 长链接linux,手把手教你写 Socket 长连接
  18. NOIP2012P4 文化之旅 题解
  19. Lifecycle使用篇
  20. 【人因工程】熵值法求权重正反向化的分析

热门文章

  1. Java入门第二季学习总结
  2. vue中的 :class
  3. PMP_强化练习题(三)(3A通过分享)(180题附答案及解析)
  4. 安卓苹果,诺基亚,微软
  5. Android适配全面屏_若雪似风_新浪博客
  6. 隐藏jupyter notebook或jupyterlab运行代码后显示的红色警示框
  7. 【新书推荐】【2018.02】劳特利奇国防研究手册(第一版)
  8. E45 ‘readnoly’ option is set解决办法
  9. 华中科技大学软件学院编译原理实验一
  10. 汪洋长篇讲话推荐《大数据》