事件分发机制

1.事件分发机制中的onTouch和onTouchEvent有什么区别,又该如何使用?
这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。如果onTouch方法中
通过返回true将事件消费掉,onTouchEvent将不再会执行。
另外需要注意的是,onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点
击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给他注册onTouch事件将永远得不到执行。
对于这一类控件,如果我们想要监听它的onTouch事件,就必须通过在该控件中重写onTouchEvent方法来实现。
2.请描述Android的事件分发机制
Android的事件分发机制主要是Touch事件分发,有两个主角:ViewGroup和View。Activity的Touch事件事实上是
调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理。
View在ViewGroup内,ViewGroup也可以在其他的ViewGroup内,这时候把内部的ViewGroup当成View来分析。
先分析ViewGroup的处理流程:首先得有个结构模型概念:ViewGroup和View组成了一颗树形结构,最顶层为
Activity的ViewGroup,下面有若干的ViewGroup节点,每个节点之下又有若干的ViewGroup节点或者View节点,以
此类推。
当一个Touch事件到达根节点时,它会依次下发,下发的过程是调用字View的dispatchTouchEvent方法实现的。简

单来说,就是ViewGroup遍历它包含View,调用每个View的dispatchTouchEvent方法,而当子View为ViewGroup时,

又会通过调用ViewGroup的dispatchTouchEvent方法继续调用其内部的View的dispatchTouchEvent方法。

dispatchTouchEven方法只负责事件的分发,他拥有boolean类型的返回值,当返回为true时,顺序下发会中断。
1.Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent,
dispatchEvent,onTouchEvent三个相关事件。View包含dispatchTouchEvent,dispatchEvent两个相关事件。其中
ViewGroup又继承于View。
2.ViewGroup 和 View 组成了一个树状结构,根节点为 Activity 内部包含的一个 ViwGroup。
3.触摸事件由 Action_Down、Action_Move、Aciton_UP 组成,其中一次完整的触摸事件中,
Down 和 Up 都只有一个,Move 有若干个,可以为 0 个。
4.当Activity接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup的遍历可以看成是递归的。分
发的目的是为了找到真正要处理本粗完整触摸事件的View,这个View会在onTouchEvent结果返回true
5.当某个子View返回true时,会终止Down事件的分发,同时在ViewGroup中记录孩子View。接下去的MOVE和UP事件
将有该子View直接进行处理。由于子View是保存在ViewGroup中的,多层ViewGroup的节点结构时,上机ViewGroup
保存的会是真实处理事件的View所在的ViewGroup对象。
6.当ViewGroup中所有子View都不捕获Down事件时,将触发ViewGroup自身的onTouch事件。触发的方式是调用
super.dispatchTouchEvent函数,即父类View的dispatchTouchEvent方法。在所有子View都不处理的情况下,触
发Activity的onTouchEvent方法。
7.onInterceptTouchEvent有两个作用:1)拦截DOWN事件的分发2)终止UP和MOVE之间向目标View传递,是的目标
View所在的ViewGroup捕获UP和MOVE事件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值