图片会说话系列之Android事件的分发传递机制
在一些复杂布局中,经常会遇到事件冲突,事件失效等问题,这就需要我们深入理解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事件的分发传递机制相关推荐
- Android Activity 和 ViewGroup中事件触发和传递机制
在Android中,Activity和View都能接收触摸和按键事件,如果响应事件只需要在继承类里复写事件函数即可. 1.在只有Activity的情况: 1)Touch事件触发流程: 首先触发d ...
- Android事件分发之ACTION_CANCEL机制及作用
目录 ACTION_CANCEL产生场景 ACTION_CANCEL作用 FLAG_DISALLOW_INTERCEPT的作用 如果要查看ACTION_MOVE与ACTION_UP的事件传递机制,查看 ...
- Android 触摸事件(Touch)的传递机制
Touch 事件的传递机制 一个完整的touch 事件,由一个 down 事件.n 个 move 事件,一个 up 事件组成. Touch 事 件 一 般 的 传 递 流 程 Activity--&g ...
- Android事件分发之ACTION_MOVE与ACTION_UP的传递机制
目录 引言 ACTION_MOVE与ACTION_UP的传递机制 mFirstTouchTarget作用 mFirstTouchTarget为什么是链表结构 引言 关于Android事件分发机制网上相 ...
- Android之Android触摸事件传递机制
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53431274 本文出自:[顾林海的博客] ##前言 关于Android ...
- Android事件分发机制详解及解决文案:史上最全面、最易懂
点击屏幕Android事件是如何传递,先上图然后再源码解读 源码解读 当用户触摸屏幕首先由当前Activity来分发 public class TouchEventActivity extends A ...
- Anroid View事件响应机制和ViewGroup的事件响应分发机制
注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...
- android点击事件的优先级,Android事件体系全面总结+实践分析,系列篇
前言 在这一个月里,我利用闲余的时间看了下最近Android职业发展这块该怎么选择?这个问题各位大神的回答都非常透彻,相信对大家或多或少都在一定程度上有很大的帮助,今天在这里写这篇文章更多的是想以我开 ...
- 总结系列——聊聊android里面的事件分发
前言 android 中的事件分发,已经是老生常谈的问题了,一般都是从Activity开始聊,但是真的是这样吗?hongyang大神之前一篇纠错,解决了我一个很大的困惑,也算是扫盲吧,这篇文章,是从头 ...
- 【Android开发坑系列】之事件
总结一下: 1.Touch事件分发中只有两个主角: ViewGroup和View. ViewGroup包含onInterceptTouchEvent.dispatchTouchEvent.onTouc ...
最新文章
- mysql遵循acid_mysql关系型数据库遵循ACID规则
- IP地址修改后ORACLE不能使用问题
- JavaScript的文档窗口事件
- PuTTY 命令行改进 有效解决 中文乱码
- java中Locks的使用
- 新版kali安装beef-xss一大堆报错解决办法
- NOTEPAD大神是否鄙视一切IDE?
- a算法和a*算法的区别_游戏寻路中 A* 算法的改进
- linux下通过ping命令监控网络抖动脚本
- Virtual Private Network(虚拟专用网络隧道)详解
- springboot毕设项目自驾旅游网站的设计与实现gah85(java+VUE+Mybatis+Maven+Mysql)
- Bitbucket 添加ssh密钥
- 如何在Google Chrome中手动设置位置信息
- 微型计算机控制数字量输入输出,计算机控制系统输入/输出通道
- Vue:把组件作为自定义元素来使用以及Identifier ' simple_couter' is not in camel case问题解决
- Linux-vim设置
- socket 长链接linux,手把手教你写 Socket 长连接
- NOIP2012P4 文化之旅 题解
- Lifecycle使用篇
- 【人因工程】熵值法求权重正反向化的分析