思考
- 在学习事件分发机制之前,我们需要考虑几个概念
- 什么是事件?
- 什么是事件序列?
- 什么是事件处理程序?
- 什么是事件分发机制?
- 如果你都了解了,可以跳过本篇,如果你还不了解,可以看下我浅显的认识
什么是事件?
- 我们常说的与用户交互,其实就是当用户手指触摸屏幕的时候,根据用户手指的行为从而产生的事件对象,这一个事件对象就是我们所说的事件
- 手指按下,产生down事件
- 手指滑动,产生move事件
- 手指松开,产生up事件
- Android系统会把这些相应的事件信息与事件产生环境封装成一个MotionEvent对象,注意这里的MotionEvent对象对应的是一个事件,也就是说当用户手指按下的瞬间,就会产生down事件,系统就会封装一个MotionEvent对象出来
- 了解这个概念的目的是因为,在我看来,我们所说的事件处理程序,事件分发机制就是在讨论MotionEvent的处理程序和分发机制
什么是事件序列
- 在实际的用户手指与屏幕交互中,不只产生一个MotionEvent对象,
比如有按下必有抬起。从而产生2个MotionEvent对象,按下抬起是最小的事件序列单元。 - 我们把一次交互过程中,所产生的MotionEvent对象按照用户操作顺序组合起来就产生了事件序列
什么是事件处理程序
- 当MotionEvent(事件)产生后,系统根据该事件对象该做什么样的反应,事件处理程序就是用来告诉系统该做什么反应的。
- 我们在初学阶段,学过所谓的四种配置监听Button监听的方法,其实就是在定义一个事件处理程序,我们把具体按下后要做的操作写入方法中,当程序运行并点击按钮后,就会执行相应的效果
什么是事件分发机制
- 现在有了事件对象,有了事件处理程序。那么事件对象如何去找到事件处理程序呢?这就是事件分发所做的工作。这不是一件简单的事,因为屏幕上的一个像素点,可能所属于多个View的管辖范围。在这个像素点所产生的事件哪一个View去消费,这个寻找过程是我们所要关注的。
小结
- 基础概念很简单,我总结的意义是让思路更加清晰,逻辑性更强一点。也许有些话阐述的不太准确与专业,但我还是会不停的去修改的更专业与更全面一些。