1、单点触摸
根据面向对象思想,事件被封装成 MotionEvent 对象
事件 | 简介 |
---|---|
ACTION_DOWN | 手指 初次接触到屏幕 时触发 |
ACTION_MOVE | 手指 在屏幕上滑动 时触发,会会多次触发 |
ACTION_UP | 手指 离开屏幕 时触发 |
ACTION_CANCEL | 事件 被上层拦截 时触发 |
手指落下(ACTION_DOWN) -> 移动(ACTION_MOVE) ->离开(ACTION_UP)
2、多点触摸
多点触控( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的人机交互操作,多点触控是从 Android 2.0 开始引入的功能
事件 | 简介 |
---|---|
ACTION_DOWN | 第一个 手指 初次接触到屏幕 时触发 |
ACTION_MOVE | 手指 在屏幕上滑动 时触发,会多次触发 |
ACTION_UP | 最后一个 手指 离开屏 时触发 |
ACTION_POINTER DOWN | 有非主要的手指按下(即按下之前已经有手指在屏幕上) |
ACTION _POINTER UP | 有非主要的手指抬起(即抬起之后仍然有手指在屏幕上). |
以下事件类型不推荐使用 | 一以下事件在 2.2 版本以上被标记为废弃一- |
ACTION_POINTER 1 | 第 2 个手指按下,已废弃,不推荐使用 |
DOWNACTION _POINTER 2 | 第 3个手指按下,已废弃,不推荐使用。 |
DOWNACTION_POINTER 3 | 第 4 个手指按下,已废弃,不推荐使用。 |
DOWNACTION POINTER 1 | 第 2 个手指抬起,已废弃,不推荐使用。 |
UPACTION POINTER 2 | 第 3个手指抬起,已废弃,不推荐使用 |
UPACTION POINTER 3 UP | 第 4 个手指抬起,已废弃,不推荐使用 |
3、手势
6930002b33d03e0043c6996cbf86394.png4、 Android页面View的体系结构
c115ec08f8debfa86cd46e60ec3f71a.png5、事件的处理函数
类型 | 相关方法 | Activit | ViewGroup | View |
---|---|---|---|---|
事件分发 | dispatchTouchEvent | 是 | 是 | 是 |
事件拦截 | onlnterceptTouchEvent | 否 | 是 | 否 |
事件消费 | onTouchEvent | 是 | 是或否 | 是 |
6、事件分发的大致流程
91d678413c550a724cad72022fbada3.png7、事件消费的大致流程
494534357311d5cdcf9012c9b6d13c2.png8、事件分发代码
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean result = false; // 默认状态为没有消费过
if (!onInterceptTouchEvent(ev)) { // 如果没有拦截交给子View
result = child.dispatchTouchEvent(ev);
}
if (!result) { // 如果事件没有被消费,询问自身onTouchEvent
result = onTouchEvent(ev);
}
return result;
}
29dd2a0688714bcd84986ac0e0c7ba4.png
网友评论