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 ...
随机推荐
- java 调用axis2 webservice
import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apach ...
- php : 配置
一. php: undefined function mysql_connect() mac 上操作 一.有可能是因为版本不同而引起的 PHP5中使用mysql_connect()函数进行连接.但P ...
- 可拖拽和带预览图的jQuery文件上传插件ssi-uploader
插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...
- win7 32位安装php redis驱动
根据php版本下载php_redis扩展,然后把php_redis.dll这个扩展文件放到php中的ext文件夹中,然后再去php-ini中添加一行代码:extension=php_redis.dll ...
- WPF界面布局——Canvas
Canvas用于定义一个区域,称为画布,用于完全控制每个元素的精确位置.它是布局控件中最为简单的一种,直接将元素放在指定位置,使用Canvas时,必须指定一个子元素的位置(相对于Canvas),否则所 ...
- MySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.解决办法
Fri Jun 17 13:46:54 CST 2016 WARN: Establishing SSL connection without server's identity verificatio ...
- 虚拟机解决Device eth0 does not seem to be present 问题。
Device eth0 does not seem to be present... 出现这个问题基本上是因为虚拟机是克隆的导致机器的mac网卡不一致,所以系统识别网卡失败:
- Spring 相关jar包详细介绍
文章转自:http://blog.csdn.net/farawayhome/article/details/6623946 aspectj目录下是在Spring框架下使用aspectj的源代码和测试程 ...
- iOS开发中关于像素的几个概念
DPI与PPI DPI(Dots Per Inch)是印刷行业中用来度量空间点密度用的,这个值是打印机每英寸可以喷的墨汁点数. 计算机显示设备从打印机中借鉴了DPI的概念,由于计算机显示设备中的原子单 ...
- split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
http://blog.sina.com.cn/s/blog_b6487d470101g0hp.html [1]单个符号作为分隔符 String address="上海|上海 ...