Android事件分发机制

1.被分发的对象

被分发的对象是那些?被分发的对象是用户触摸屏幕而产生的点击事件,事件主要包括:按下、滑动、 抬起与取消。这些事件被封装成MotionEvent 对象。该对象中的主要事件如下表所示:

 

按下、滑动、抬起、取消这几种事件组成了一个事件流。事件流以按下为开始,中间可能有若干次滑 动,以抬起或取消作为结束。

2.分发事件的组件

分发事件的组件,也称为分发事件者,包括 Activity View ViewGroup 。它们三者的一般结构为:

 

从上图中可以看出, Activity 包括了 ViewGroup ViewGroup 又可以包含多个 View

 

3.分发的核心方法

负责对事件进行分发的方法主要有三个,分别是:
   dispatchTouchEvent()
   onTouchEvent()
   onInterceptTouchEvent ()。
它们并不存在于所有负责分发的组件中,其具体情况总结于下面的表格中:

 从表格中看,dispatchTouchEvent,onTouchEvent方法存在于上文的三个组件中。而 onInterceptTouchEvent为ViewGroup独有。这些方法的具体作用在下文作介绍。

4. 事件分发过程

向下传播 Activity 包括 Layout ,事件从 Activity Layout 传播被称作 向下传播 Layout 包含若干
View ,事件从 Layout 向其子 View 传播,也被称为 向下传播
向上传播:与 向下传播 相反。
分发方法 dispatchTouchEvent
从方法的名称中可以看出该方法主要是负责分发,是安卓事件分发过程中的核心。事件是如何传递
的,主要就是看该方法,理解了这个方法,也就理解了安卓事件分发机制。
在了解该方法的核心机制之前,需要知道一个结论:
       如果某个组件的该方法返回 TRUE, 则表示该组件已经对事件进行了处理,不用继续调用其余
组件的分发方法,即停止分发。
       如果某个组件的该方法返回 FALSE, 则表示该组件不能对该事件进行处理,需要按照规则继续
分发事件。在不复写该方法的情况下,除了一些特殊的组件,其余组件都是默认返回 False
的。后续有例子说明。
ViewGroup 独有的 onInterceptTouchEvent 方法
        ViewGroup 的该方法与 Activity 的类似,只是新添了一个 onInterceptTouchEvent 方法。当事件传 入时,首先会调用onInterceptTouchEvent
      如果该方法返回了 FALSE (表示不拦截),则交给子 View 去调用 dispatchTouchEvent ()方
      如果该方法返回了TRUE (表示拦截),则直接交给该 ViewGroup 对象的 onTouchEvent(ev)
方法处理,具体是否能处理以 onTouchEvent() 的实际情况为准。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乾行lovemn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值