版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cui130/article/details/87483821
先上干货:
1.小白看过来(概念讲解)
1.1 事件分发的对象是谁?
答:点击事件(Touch
事件)
- 定义
当用户触摸屏幕时(View
或ViewGroup
派生的控件),将产生点击事件(Touch
事件)
Touch
事件的相关细节(发生触摸的位置、时间等)被封装成MotionEvent
对象
- 事件类型(4种)
事件类型 | 具体动作 |
---|---|
MotionEvent.ACTION_DOWN | 按下View(所有事件的开始) |
MotionEvent.ACTION_UP | 抬起View(与DOWN对应) |
MotionEvent.ACTION_MOVE | 滑动View |
MotionEvent.ACTION_CANCEL | 结束事件(非人为原因) |
- 特别说明:事件列
从手指接触屏幕 至 手指离开屏幕,这个过程产生的一系列事件
注:一般情况下,事件列都是以
DOWN
事件开始、UP
事件结束,中间有无数的MOVE事件,如下图:事件列
即当一个点击事件(MotionEvent
)产生后,系统需把这个事件传递给一个具体的 View
去处理。
1.2 事件分发的本质
答:将点击事件(MotionEvent)传递到某个具体的View
& 处理的整个过程
即 事件传递的过程 = 分发过程。
1.3 事件在哪些对象之间进行传递?
答:Activity、ViewGroup、View
Android
的UI
界面由Activity
、ViewGroup
、View
及其派生类组成UI界面
示意图
1.4 事件分发的顺序
即 事件传递的顺序:Activity
-> ViewGroup
-> View
即:1个点击事件发生后,事件先传到
Activity
、再传到ViewGroup
、最终再传到View
示意图
1.5 事件分发过程由哪些方法协作完成?
答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()
示意图
参考:https://www.jianshu.com/p/38015afcdb58