Android中View的事件分发机制
简介
事件也称MotionEvent,事件分发机制就是对MotionEvent事件的分发过程,即当一个MotionEvent发生之后,系统需要把这个事件传递给一个具体的View。
点击事件的分发过程由三个函数共同完成:
public boolean dispatchTouchEvent(MotionEvent ev){
boolean consume = false;
if(onInterceptTouchEvent(ev)){
consume = onTouchEvent();
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
点击事件产生后,首先会发送给根Viewgroup,这是它的DTE会被调用。如果OITE返回true,表示要拦截当前事件,接着事件就会交给ViewGroup处理,即它的onTouchEvent方法就会被调用。如果OITE返回false,表示不拦截当前事件,当前事件会被传递给它的子元素,子元素的DTE会被调用。
当一个View需要处理事件时,如果它设置了onTouchListener(OTL),那么OTL的onTouch方法会被回调。如果OnTouch返回false,当前View的onTouchEvent会被调用;如果返回true,那么onTouchEvent不会被调用。给View设置的OTL会比onTouchEvent优先级要高,在onTouchEvent中,如果当前设置有OnClickListener,那么他的onClick方法会被调用。
当一个点击事件产生后,它的传递过程遵循如下顺序:Activity->Window->View, 如果View的onTouchEvent返回false,那么它的父容器的onTouchEvent将会被调用,如果所有的元素都不处理这个事件,那么事件将会被最终传递给Activity处理。
ViewGroup默认不拦截任何事件。OITE默认返回false。View没有OITE方法,一旦有点击事件传递给它,那么他的onTouchEvent方法就会被调用。onTouchEvent默认都会消耗时间,除非它是不可点击的。View的enable属性不影响onTouchEvent默认返回值,哪怕一个View是disable的状态,只要它的clickable或者longClickable有一个是true,那么它的onTouchEvent就会返回true。
Android中View的事件分发机制的更多相关文章
- Android中View的事件分发机制——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处 介绍 点击事件的事件分发就是对MotionEvent事件的分发过程.当一个MotionEvent产生了以后,系统须要把这个事件传递给 ...
- Android View的事件分发机制和滑动冲突解决方案
这篇文章会先讲Android中View的事件分发机制,然后再介绍Android滑动冲突的形成原因并给出解决方案.因水平有限,讲的不会太过深入,只希望各位看了之后对事件分发机制的流程有个大概的概念,并且 ...
- Android 进阶学习:事件分发机制全然解析,带你从源代码的角度彻底理解(上)
http://blog.csdn.net/guolin_blog/article/details/9097463 事实上我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客開始,就零 ...
- Android View的事件分发机制
准备了一阵子,一直想写一篇事件分发的文章总结一下.这个知识点实在是太重要了. 一个应用的布局是丰富的,有TextView,ImageView,Button等.这些子View的外层还有ViewGroup ...
- 【Android - 自定义View】之View的事件分发机制
参考资料: View事件分发:http://blog.csdn.net/pi9nc/article/details/9281829 ViewGroup事件分发:http://blog.csdn.net ...
- 【Android - 进阶】之事件分发机制
参考资料: View事件分发:http://blog.csdn.net/pi9nc/article/details/9281829 ViewGroup事件分发:http://blog.csdn.net ...
- View的事件分发机制解析
引言 Android事件构成 在Android中,事件主要包含点按.长按.拖拽.滑动等,点按又包含单击和双击,另外还包含单指操作和多指操作.全部这些都构成了Android中的事件响应.总的来说.全部的 ...
- Android view 的事件分发机制
1 事件的传递顺序是 Activity -> Window -> 顶层View touch 事件产生后,最先由 activity 的 dispatchTouchEvent 处理 /** * ...
- Android View的事件分发机制探索
概述 Android事件传递机制也是Android系统中比较重要的一块,事件类型有很多种,这里主要讨论TouchEvent的事件在framework层的传递处理机制.因为对于App开发人员来说,理解f ...
随机推荐
- oracle 自增ID
drop sequence SEQ_sys_dictionary; create sequence SEQ_sys_dictionary INCREMENT BY START WITH ; creat ...
- JSON数据解析
1 JSON简介 JSON(JavaScript Object Notation),类似于XML,是一种轻量级的数据交换格式,比如在JavaEE中Struts2与Ajax在来回传递数据时,除了可以利用 ...
- kali安装java1.8
0x01 下载 首先,去官方网站下载JDK1.8对应的版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...
- Windows下的Memcache安装
Windows下的Memcache安装: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 'c:\memca ...
- hdu 5506 GT and set dfs+bitset优化
GT and set Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Probl ...
- fonts.googleapis.com 加载慢的解决方法
把:fonts.googleapis.com 替换成 fonts.useso.com
- iPhone系列设备媒体查询:
这就引出一个问题,我们在对iPhone设备适配时候,又多出几种情况.iPhone系列设备媒体查询: @media only screen and (min-device-width: 320px){ ...
- 慕课网__HTML5 存储
application cache 只能更新全部,不能更新单独的文件 在更新后,要重新打开浏览器,缓存才会生效, 不能实时生效
- 可靠UDP
tcp为我们做了什么事情? 总得来说,tcp做了这几件事: 通过序列号和基于确认的超时重传机制,为上层提供了可靠的字节流服务: 通过滑动窗口.拥塞窗口提供了流量控制: 默认情况下,为了有效利用带宽,t ...
- 使用requestAnimationFrame做动画效果二
3月是个好日子,渐渐地开始忙起来了,我做事还是不够细心,加上感冒,没精神,今天差点又出事了,做过的事情还是要检查一遍才行,哎呀. 使用requestAnimationFrame做动画,我做了很久,终于 ...