事件分发机制学习
时间:2022-04-22
本文章向大家介绍事件分发机制学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
0x01 事件分发机制中三个重要的函数
View事件机制有哪几个重要函数?dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()
流程:触摸事件发生后,如果事件的坐标处于ViewGroup的管辖范围,那么首先调用ViewGroup的dispatchTouchEvent方法,然后其内部调用onInterceptTouchEvent()方法来判断是否拦截该触摸事件,若拦截该事件则调用ViewGroup的onTouchEvent()方法,否则的话,交给其子View的disPatchEvent()处理。
0x02 事件分发的优先级
同时重写View中的onTouchEvent,设置View的onTouchListener与onClickListener
首先调用onTouchListener,若返回值为false调用onTouchEvent(返回值为false表示不消耗该事件),再去调用onClick(再onTouchEvent调用父类super.onTouchEvent(event)实现)注意:这里为什么不能直接在onTouchEvent中处理onClick?点击是什么概念?他是down与up的都在同一区域的结合,因此onTouchEvent无法直接判断。
总结:优先级顺序:onTouchListener>onTouchEvent>onClick
0x03 事件回传过程
- 如果
View
只消耗down
事件,而不消耗其他事件,那么其他事件不会回传给ViewGroup
,而是默默的消逝掉。我们知道,一旦消耗down
时间,接下来的该系列所有的事件都会交给这个View
,因此,如果不处理down
以外的事件,这些事件就会被“遗弃”。 - 如果
ViewGroup
决定拦截,那么这个系列事件都只能由它处理,并且onInterceptTouchEvent
不会再被调用。 - 某个
View
,在onTouchEvent
中,如果针对最开始的down
事件都返回false
,那么接下来的事件系列都不会交给这个View
。 -
ViewGroup
默认不拦截事件,即onInterceptTouchEvent
默认返回false
。 -
View
的onTouchEvent
默认返回false
,即不消耗事件。 -
View
没有onInterceptTouchEvent
方法。
参考自:http://blog.csdn.net/huachao1001/article/details/51766225
http://www.jianshu.com/p/e99b5e8bd67b
- Golang事务模型
- 厚土Go学习笔记 | 35. web服务器实现动态路径
- 数据库连接池、dbutil_知识点全掌握
- Golang 序列化之 ProtoBuf
- Golang RPC 之 gRPC
- 解决连通性问题的四种算法
- 使用shell批量生成数据整合式迁移的脚本(r8笔记第52天)
- Jdbc知识点全整理,你值得拥有 (1)
- SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体检测模型
- dg broker校验失败的一个奇怪问题(r8笔记第50天)
- golang 几种字符串的连接方式
- 整理ING
- dg broker校验失败的一个奇怪问题(二) (r8笔记第51天)
- Jdbc知识点全整理,你值得拥有 (2)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法