一.事件分发基础认知
事件分发的对象是谁:点击事件(Touch事件)
定义:当用户触摸屏幕时(View 或 ViewGroup派生的控件),将产生点击事(Touch事件)
Touch事件的相关细节(发生触摸的位置、时间等)被封装成MotionEvent对象
- 事件类型
事件类型 | 具体动作 |
---|---|
MotionEvent.ACTION_DOWN | 按下View(所有事件的开始) |
MotionEvent.ACTION_UP | 抬起View(与DOWN对应) |
MotionEvent.ACTION_MOVE | 滑动View |
MotionEvent.ACTION_CANCEL | 结束事件(非人为原因) |
- 事件序列 (从手指接触屏幕 至 手指离开屏幕,这个过程产生的一系列事件)
注:一般情况下,事件列都是以DOWN事件开始、UP事件结束,中间有无数的MOVE事件
事件分发的本质
将点击事件(MotionEvent)传递到某个具体的View & 处理的整个过程
即 事件传递的过程 = 分发过程。
事件在哪些对象之间进行传递?
Android的UI界面由Activity、ViewGroup、View 及其派生类组成
事件分发的顺序
即 1个点击事件发生后事件传递的顺序:Activity
->ViewGroup
->View
事件分发过程由哪些方法协作完成?
如下
方法 | 作用 | 调用时刻 |
---|---|---|
dispatchTouchEvent() | 分发(传递)事件 | 当点击事件能够传递给当前事件时,就会调用 |
onInterceptTouchEvent() | 处理点击事件 | 在dispathTouchEvent 内部调用 |
onTouchEvent() | 判断是否拦截某个事件(只存在于ViewGroup,普通View没有该方法) | 在ViewGroup 的dispathTouchEvent 内部调用 |
二.事件分发机制 源码分析
Android事件分发流程 = Activity
-> ViewGroup
->View
即:1个点击事件发生后,事件先传到Activity、再传到ViewGroup、最终再传到 View
从上可知,要想充分理解Android分发机制,本质上是要理解:
Activity
对点击事件的分发机制ViewGroup
对点击事件的分发机制View
对点击事件的分发机制
Activity事件的分发机制
ViewGroup事件的分发机制
从上面Activity事件分发机制可知,ViewGroup事件分发机制从dispatchTouchEvent()开始
核心方法总结
View事件的分发机制
注:onTouch()的执行 先于 onClick()
总结
工作流程 总结
以角色为核心的图解说明
以方法为核心的图解说明
本文内容来源于大神 Carson_Ho 。原文地址