引言:现在 GitHub 上酷炫的 Android 控件越来越多,一方面我们可以让 App 各美观,另一方面我们这些开发者也可以从中学习到各种知识。写下这篇博文主要是记录研究自定义控件源码过程中接触到的知识盲区,帮助自己巩固知识的同时,也和大家交流学习,一起进步。
废话不多说,进入正题:
一、概述 View 事件传递机制
用户通过点击、滑动屏幕与 App 产生交互是移动互联网时代的交互基础,那么在 Android 中,用户的点击、滑动是怎么和 Android 系统产生交互的呢?
在 Android 中,我们所说的点击、滑动等事件,都被视为 MotionEvent ,而在 MotionEvent 中,我们的操作行为被归类为以下常量:
- ACTION_DOWN
- ACTION_UP
- ACTION_MOVE
- ACTION_POINTER_DOWN
- ACTION_POINTER_UP
- ACTION_CANCEL
除此以外,为了让系统更好地管理和操作这些事件,MotionEvent 还需要记录事件的发生时间,判断事件是单点触控/多点触控以及事件的发生时间。可能有人会问了,就这么点常量够我们判断我们的手势吗?莫慌,Google 对事件可是有着明确的区分标准呢:一次触控操作,起于 ACTION