5分钟过一遍Android事件分发(笔记风)

前言

前几篇文章咱们从源码的层面分析了事件分发机制…不过感觉有些时候还是需要记一些笔记般的内容,简单快捷的回忆对应的内容。

正文

布局嵌套层级:ViewGroupA中嵌套ViewGroupB,然后ViewGroupB嵌套ViewGroupC,ViewGroupC中包含ViewD。

基于此,咱们分情况记录一些情况:

一、C的onInterceptTouchEvent()返回true,onTouchEvent()返回false

现象: DOWN走到C的onTouchEvent(),然后逐层回调父View的onTouchEvent(),并且后续MOVE、UP将不再回调。

解读:
DOWN一路下来,因为没有任何onTouchEvent()返回true,那么意味着这条分发链上没有任何View消费事件,也就意味着mFirstTouchTarget为null,因此后续的MOVE、UP事件就不会再重新分发。

二、C的onInterceptTouchEvent()返回false,onTouchEvent()返回true

现象: DOWN一直传到D,然后调D的onTouchEvent(),C的onTouchEvent()。找到消费事件的C,后续事件正常按ABC的顺序调用

解读: 因为不存在任何View拦截,所以事件会一直传递至D。然后逐层倒序回调onTouchEvent()来确定是否有子View消费。而此时我们的C返回了true,所以着mFirstTouchTarget不为null,后续事件就交由C去消费。

三、C的dispatchTouchEvent()直接返回true,且不主动调用super

现象: 正常回调AB、但永远只会回调C的dispatchTouchEvent()

解读: 父View通过子View的dispatchTouchEvent()的返回值来决定分发权。一旦返回true,意味着找到了消费此事件的View。因为我们直接返回了true,所以这个对于父View来说mFirstTouchTarget已经确认。后续事件直接分发到此View。

但是因为我们我们直接true,且不掉super那意味着onTouchEvent()没有时机执行…

尾声

当然可能会有小伙伴说,还有一些情况呢?但其实万变不离其宗,你都会唱、跳、RAP了还差打篮球吗?j你太美就哦了。

最近在看View的绘制体系,不出意外国庆会开始陆续连载~

我是一个应届生,最近和朋友们维护了一个公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,以及我们一步步学习的记录,如果感兴趣的朋友可以关注一下,一同加油~

个人公众号:咸鱼正翻身

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值