android View 系统 touch 事件处理
2016-03-19 00:12
477 查看
这篇文章总结一下 android View 系统 touch 事件处理,View 系统对 touch 事件的处理包含两部分
1. View 对 touch 事件的处理
2. ViewGroup 对 touch 事件的处理
除了上述两点,touch 事件的处理还有一个很重要的知识点就是 touch 事件的分发, touch 事件产生后,系统需要把这个事件传递给一个具体的 view 来处理,这个传递的过程就是 touch 事件的分发。ViewGroup 对 touch 事件的处理,就包含了 touch 事件分发的大部分内容。
touch 事件,在 android 中是用 MotionEvent 对象来表示的。MotionEvent 有很多类型,目前我们关注的类型有 Down、Up、Move、Cancel。
一个完整的手势是一个 MotionEvent 事件序列,这个 MotionEvent 事件序列由 Down 类型的 MotionEvent 开始,Up 类型的 MotionEvent 结束,中间可以包含 0…n 个 Move 类型的 MotionEvent。
我们对 touch 事件的处理,都是对 MotionEvent 事件序列整体来进行分析,因为同一个手势的 MotionEvent 事件,前面 MotionEvent事件的处理结果会影响后面 MotionEvent 事件的分发。
Down 类型的事件在传递过程中会遍历每个子 View 来寻找事件处理的目标 View。找到 targetview 之后,后续的 Move、Up 类型的事件父 View 直接传递给该 View,省去了遍历的过程,提高了系统效率。要成为目标 View 必须满足 2 个条件:
1. touch 事件的位置必须落在该 view 占用的空间
2. 必须消耗掉 Down 类型的事件
1. View 对 touch 事件的处理
2. ViewGroup 对 touch 事件的处理
除了上述两点,touch 事件的处理还有一个很重要的知识点就是 touch 事件的分发, touch 事件产生后,系统需要把这个事件传递给一个具体的 view 来处理,这个传递的过程就是 touch 事件的分发。ViewGroup 对 touch 事件的处理,就包含了 touch 事件分发的大部分内容。
touch 事件,在 android 中是用 MotionEvent 对象来表示的。MotionEvent 有很多类型,目前我们关注的类型有 Down、Up、Move、Cancel。
一个完整的手势是一个 MotionEvent 事件序列,这个 MotionEvent 事件序列由 Down 类型的 MotionEvent 开始,Up 类型的 MotionEvent 结束,中间可以包含 0…n 个 Move 类型的 MotionEvent。
我们对 touch 事件的处理,都是对 MotionEvent 事件序列整体来进行分析,因为同一个手势的 MotionEvent 事件,前面 MotionEvent事件的处理结果会影响后面 MotionEvent 事件的分发。
Down 类型的事件在传递过程中会遍历每个子 View 来寻找事件处理的目标 View。找到 targetview 之后,后续的 Move、Up 类型的事件父 View 直接传递给该 View,省去了遍历的过程,提高了系统效率。要成为目标 View 必须满足 2 个条件:
1. touch 事件的位置必须落在该 view 占用的空间
2. 必须消耗掉 Down 类型的事件
View 对 touch 事件的处理(流程图说明)
ViewGroup 对 touch 事件的处理
Touch 事件的分发
相关文章推荐
- fir.im Weekly - 1000 Android 开源项目集合
- NFC在Android中的应用
- android点击事件分发
- android 权重
- Android五种数据存储方式
- Android studio下的SerialPort开发
- android学习笔记——监听器
- Android 从setContentView谈Activity界面的加载过程
- android jni socket
- android ToolBar + SearchView
- Android分类块图片自适应宽度。
- Android TextView的使用
- android 权重
- 安卓自定义组件及其操控
- Android Butter Knife 框架——最好用的View注入
- andorid studio 启动 fetching android sdk..问题解决办法
- Android+PHP+MYSQL开发简单实例
- 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
- Android常用权限permission列表摘录
- Error inflating class android.widget.CheckBox