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 ...
随机推荐
- python 类
封装 继承(可多继承) 多态 经典类:深度优先 新式类(继承object):广度优先 模板: class <类名>(object): <语句> class <类名> ...
- 使用Fusioncharts实现后台处理进度的前台展示
本文要解决两个问题: 1.在ajax的数据交互中,如何获得后台的处理进度? 2.在前台界面中,如何使用图形化的方式展示后台处理进度? 关于第一个问题,不是本文的重点,简单说一下思路.因为HTTP协 ...
- oracle中trim,ltrim,rtrim函数用法
该函数共有两种作用:第一种,即大家都比较熟悉的去除空格.例子:--TRIM去除指定字符的前后空格SQL> SELECT TRIM(' dd df ') FROM dual;TRIM('DDDF' ...
- Linux时间设置及同步
Linux系统安装时选择的UTC时间是国际标准时间,而中国处于UTC+8时区,因此安装系统时不要选择UTC时区. 还有就是Linux有两个时钟: 1.Bios时钟及硬件时间 2.Kernel时钟及系统 ...
- 绿色 或者 免安装 软件 PortableApps
Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...
- jquery.select2 模糊查询
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link re ...
- 一个div相对于外层的div水平和垂直居中
我自己感觉,第四种比较常用 <title>无标题文档</title><style> .parent { width:800px; ...
- Eclipse通过jdbc连接oracle数据库
首先要有包 然后,在项目中加载进去- 最后就是代码了 import java.sql.*;public class GetConn {public Connection getConnection() ...
- 关于Application.Lock和Lock(obj) 转 http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html
关于Application.Lock和Lock(obj) Posted on 2012-03-01 15:28 billpeng 阅读(3498) 评论(3) 编辑 收藏 1.Application. ...
- jquery实现on/off开关按钮
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...