android事件分发机制分析(三)

android事件分发机制分析(一)
android事件分发机制分析(二)
android事件分发机制分析(三)

总结一下事件分发,下图源自Kelin的简书文章,介绍了对于ACTION_DOWN事件的分发,上面是activity,中间是ViewGroup,下面是View,当然多层ViewGroup也是同样的道理。
事件分发

ACTION_DOWN

Activity:
  1. 首先调用dispatchTouchEvent对事件进行分发。
  2. 若ViewGroup或者子view不消费,调用自身的onTouchEvent;
GroupView:
onInterceptTouchEvent不拦截:
  1. 对于accessbility的事件,首先分发给accessbility的view。
  2. 先按照y轴顺序,再按照绘画顺序分发给所有的子view。
  3. 若子view都不消费,调用本身onTouchEvent。
  4. 若自身不消费,交给上层的onTouchEvent处理。
onInterceptTouchEvent拦截:
  1. 调用本身onTouchEvent。
  2. 若自身不消费,交给上层(ViewGroup或者Activity)的onTouchEvent处理。
View
  1. 首先交给已注册的onTouchListener进行处理。
  2. 若onTouchListener不消费,交给onTouchEvent。
  3. 若自身不消费,交给上层(ViewGroup或者Activity)的onTouchEvent处理。

ACTION_UP、ACTION_MOVE等

首先要说两个重要的点。
第一:ViewGroup只对ACTION_DOWN事件进行拦截,所以此等事件会被分发下去。
第二:对于已经消费的ACTION_DOWN事件,ViewGroup会新建TouchTarget记录下来放在内部的mFirstTouchTarget成员头部。随后收到ACTION_UP等就会遍历mFirstTouchTarget链表,将事件分发下去。

于是乎,可以说是谁消费谁处理,哪个View(ViewGroup)消费了ACTION_DOWN,谁就会收到UP等的事件。如果上次DOWN没有被消费,也就不会有TouchTarget,自然就不会分发下去了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值