Android View事件传递机制(一)

Android View事件传递机制(一)


需要明确的事情

  1. 用户的一次点击,会产生一个事件序列,也就是多次调用事件方法的函数。具体的说就是:一次ACTION_DOWN的事件、多个ACTION_MOVE的事件、 一个ACTION_UP的事件。
  2. 我们可以将传递过程分为两个部分,第一部分为 是否往分发事件的传递,其过程为:由父view向子view传递(也就是dispatchTouchEvent方法); 第二部分为 是否处理事件的传递,其过程为:由子view向父view传递(也就是onTouchEvent)。 onInterceptTouchEvent方法决定了第一个传递过程到哪一层结束,同时,第二个传递也就相应从这一场开始。

  3. ACTION_DOWN的事件相当于首先去寻找处理该事件的view,如果找到了,之后的事件会直接传递给该view,否则,之后的事件直接由最外层的Activity处理了。

具体的情形

注意,这里说的是down的事件。

  1. 如果 ViewViewGroupdispatchTouchEvent 返回 true ,那么该事件的传递结束,并且之后的事件序列都会只调用到该dispatchTouchEvent方法,然后结束。(不会再调用自己的onInterceptTouchEventonTouchEvent方法了。)

  2. 如果 ViewViewGrouponInterceptTouchEvent 返回 true ,那么会调用自己的onTouchEvent方法,并且继续向上传递,调用父viewonTouchEvent,直到找到一个 onTouchEvent 返回为true时停止。之后的事件就会直接传到这个onTouchEvent方法中。(之注意,之后的事件不会再调用到onInterceptTouchEvent方法)。

  3. 如果 ViewViewGrouponTouchEvent 返回 true ,是否处理事件的传递就会到此结束,不会再想起父view传递,而且之后的事件序列也就直接传到该view的onTouchEvent方法。

以上,就是view 的事件传递的宏观上的描述。可能描述的不够清楚,如果有兴趣的话,最好自己写个demo,简单的修改返回值,来进行相应的测试。只有知道了其宏观表现,对于继续深入研究时,才不会盲目不知所措。

在这一部分,主要是参考了《Android 群英会》和《Android开发艺术探索》。


以上是自己简单总结,之后会结合源码在进一步分析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值