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

前言

前几篇文章我们从源码的层面分析了事件分发机制...不过感受有些时候仍是须要记一些笔记般的内容,简单快捷的回忆对应的内容。布局

正文

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

基于此,我们分状况记录一些状况:spa

1、C的onInterceptTouchEvent()返回true,onTouchEvent()返回false3d

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

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

2、C的onInterceptTouchEvent()返回false,onTouchEvent()返回trueblog

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

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

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

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

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

可是由于咱们咱们直接true,且不掉super那意味着onTouchEvent()没有时机执行...

尾声

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

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

我的公众号:咸鱼正翻身
相关文章
相关标签/搜索