View事件分发机制
来源:互联网 发布:淘宝nike专卖店 编辑:程序博客网 时间:2024/06/05 19:04
最近重新整理了一遍View的事件分发机制。这里记录一下。
首先,要明确,事件分发有两个主角:ViewGroup 和 View。
其次,涉及的方法有三个:dispatchTouchEvent,onInterceptTouchEvent(只有ViewGroup会涉及这个方法),onTouchEvent。
*dispatchTouchEvent:用于分发事件。返回值是布尔类型,返回true,就不再往下分发事件;返回false,就往下分发事件。
*onInterceptTouchEvent:用于拦截事件。返回值是布尔类型,返回true,就表示拦截事件,由ViewGroup自己处理;返回false,就表示不拦截,事件向下传递。(另外一种说法是:1.用于拦截down事件的分发;2.中止up 和 move事件向目标View传递,使得目标View所在的ViewGroup捕获up 和 move事件。)
*onTouchEvent:用于处理事件。返回值决定了控件是否消费此次事件。尤其是对于ACTION_DOWN事件,返回true,就表示控件消费了此次事件,会继续处理后续事件;返回false,就表示控件不关心此次事件,返回并交给父控件处理。
注:消费不消费有什么区别呢?这是我之前一直很懵逼的地方,区别大了。ACTION_MOVE 和 ACTION_UP事件发生的前提是已经发生过ACTION_DOWN事件,如果ACTION_DOWN事件未被消费,系统就会认为ACTION_DOWN没有发生过,这样ACTION_MOVE 和 ACTION_UP事件就不能被捕获到。
事件分发流程:
必须要有一个View树模型的概念。最顶层是Activity,一个点击事件到来之后,从最顶层开始,也就是从Activity的ViewGroup开始,依次往下传递,传递的过程是通过调用View(ViewGroup)的dispatchTouchEvent实现的。 ViewGroup会遍历内部的子View,通过自己的dispatchTouchEvent来调用每个子View的dispatchTouchEvent方法。这样,事件就一层层传递下来了。传递的目的是找到真正需要处理此次事件的View。
后面再结合源码来具体分析一下。
- view 事件分发机制
- View 事件分发机制
- View事件分发机制
- view事件分发机制
- View事件分发机制
- view事件分发机制
- view事件分发机制
- view事件分发机制
- View事件分发机制
- View 事件分发机制
- View事件分发机制
- View事件分发机制
- view 事件分发机制
- View事件分发机制
- View事件分发机制
- View事件分发机制
- view 事件分发机制
- view事件分发机制
- 欢迎使用CSDN-markdown编辑器
- 每日学习巩固知识,下班回顾总结
- Fiddler常用功能介绍
- 欢迎使用CSDN-markdown编辑器
- redis整合spring mybatis --缓存方案
- View事件分发机制
- 顺义了,今天来到顺义了
- 监控网络使用情况的Linux命令行工具
- 实现一组功能的步骤
- C/C++的sizeof('a')和sizeof(char)
- hadoop 2.0中配置文件详解
- C++实现读取特定路径下文件夹及文件名的方法
- Fiddler抓包使用教程-基本功能介绍
- 人生之清单(list of life)