前言
Android
事件分发机制是Android
开发者必须了解的基础- 网上有大量关于
Android
事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等 - 今天,我将全面总结
Android
的事件分发机制,我能保证这是市面上的最全面、最清晰、最易懂的
1. 基础认知
1.1 事件分发的对象是谁?
答:点击事件(Touch
事件)
-
定义
当用户触摸屏幕时(View
或ViewGroup
派生的控件),将产生点击事件(Touch
事件)
Touch
事件的相关细节(发生触摸的位置、时间等)被封装成MotionEvent
对象
事件类型 | 具体动作 |
---|---|
MotionEvent.ACTION_DOWN | 按下View(所有事件的开始) |
MotionEvent.ACTION_UP | 抬起View(与DOWN对应) |
MotionEvent.ACTION_MOVE | 滑动View |
MotionEvent.ACTION_CANCEL | 结束事件(非人为原因) |
- 特别说明:事件列
从手指接触屏幕 至 手指离开屏幕,这个过程产生的一系列事件
即当一个点击事件(MotionEvent
)产生后,系统需把这个事件传递给一个具体的 View
去处理。
1.2 事件分发的本质
答:将点击事件(MotionEvent)传递到某个具体的View
& 处理的整个过程
即 事件传递的过程 = 分发过程。
1.3 事件在哪些对象之间进行传递?
答:Activity、ViewGroup、View
Android
的UI
界面由Activity
、ViewGroup
、View
及其派生类组成
1.4 事件分发的顺序
即 事件传递的顺序:Activity
-> ViewGroup
-> View
即:1个点击事件发生后,事件先传到Activity
、再传到ViewGroup
、最终再传到 View
1.5 事件分发过程由哪些方法协作完成?
答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()
1.6 总结