目录
6.2 相关核心方法返回true或者false,各有什么含义?
6.3 View的enable和clickable的属性值为true或者false有什么区别?
注意:本文只讨论Android Framework已经实现的Touch事件分发过程,暂不讨论工程师对相关类的继承、方法的重写。
1.Touch事件分发--简介
目前,用户与手机的交互方式以touch(手指触摸屏幕)为主。
用面向对象的思维解释“touch事件分发”,“touch事件”是一个对象,在Android中就是一个MotionEvent类型的实例;“分发”是方法的调用过程,MotionEvent对象作为方法的参数传递给所调用的方法。
MotionEvent对象记录了touch事件类型、发生此touch事件的位置坐标等。
举个例子,当用户触摸手机屏幕上的一个button,然后系统给出一个动态的反馈。从触摸到反馈,泛而谈之,处理流程如下:

2.Touch事件分类
| 类型 | 描述 |
|---|---|
| ACTION_DOWN | 手指按下,以下简称down |
| ACTION_UP | 手指抬起,以下简称up |
| ACTION_MOVE | 手指滑动,,以下简称move |
| ACTION_POINTER_DOWN | 多个手指按下 |
| ACTION_POINTER_UP | 多个手指抬起 |
| ACTION_CANCEL | 取消事件 |
手指从按下,再经过移动,最后抬起,走完一个完整的touch事件流程,即down>move>move>move>move>move>move>up。
手指每触碰到一个位置,都会产生一个MotionEvent对象,并分发下去。
3.参与touch事件分发的视图层级
Activity中有一个PhoneWindow实例,PhoneWindow是抽象类Window的唯一子类。
PhoneWindow中有一个DecorVIew实例,DecorVIew是FrameLayout的子类,本质是一个ViewGroup,DecorVIew是界面的根视图。常见地,在Activity#onCreate()中调用setContentView就是设置DecorVIew的子视图。
touch事件分发的入口是Activity的dispatchTouchEvent(MotionEvent event)方法。

4.参与touch事件分发的核心类和方法
| 类 | 方法 |
|---|---|
| Activity | dispatchTouchEvent onTouchEvent |
| ViewGroup | dispatchTouchEvent onInterceptTouchEvent onTouchEvent(继承View的) |
| View | dispatchTouchEvent onTouchEvent |
View的onTouch和onClick监听需要工程师在外部实现,在最后讨论
5.读源码
了解了touch事件分发的基本概念之后,那就开始读源码吧。
读源码秘诀:注重主干,选择性忽略细微的实现

本文详细探讨了Android Touch事件分发的过程,从事件的产生到在Activity、ViewGroup和View之间的传递。介绍了dispatchTouchEvent方法的作用,以及返回值true和false的含义。同时,分析了View的enabled和clickable属性对事件处理的影响,以及何时会执行onClick方法。最后,对比了OnTouchListener和OnClickListener的区别。
最低0.47元/天 解锁文章
1408

被折叠的 条评论
为什么被折叠?



