Android Touch事件分发

目录

1.Touch事件分发--简介

2.Touch事件分类

3.参与touch事件分发的视图层级

4.参与touch事件分发的核心类和方法

5.读源码

6.关于touch事件分发的几个问题

6.1 dispatchTouchEvent方法干了啥

6.2 相关核心方法返回true或者false,各有什么含义?

6.3 View的enable和clickable的属性值为true或者false有什么区别?

6.4 什么时候执行onClick方法

参考


注意:本文只讨论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事件分发的基本概念之后,那就开始读源码吧。

读源码秘诀:注重主干,选择性忽略细微的实现;带着问题去读源码比较有针对性,始终记得主线

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值