Android开发之漫漫长途 Ⅵ——图解Android事件分发机制(深入底层源码)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:06   1203   0
作者 | wangle12138
博客地址 | http://www.cnblogs.com/wangle12138/tag/Android/
声明 | 作者系列文章,原创投稿,转发等联系原作者授权。

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!另外,本系列文章知识可能需要有一定Android开发基础和项目经验的同学才能更好理解,也就是说该系列文章面向的是Android中高级开发工程师。


系列第六篇了,接着上一篇说,在上一篇文章中我们上了一个小例子来自定义View,文章比较简单,阅读量几乎没有,有灌水的嫌疑,(实际上没有,每一篇文章我都是用心在写)。这一篇文章呢,我们来看一下Android事件的分发机制。关于这方面的知识大概已经被讲烂了。我本人也看了好多关于这方面优质的文章和博客。可以说是受益匪浅,但是可是总觉得没有掌握完全。所以我去看了关于底层源码的一些知识。然后在这里分享给大家。


当我们的手指从触摸到屏幕上的各种View开始到这个点击事件结束到底经历了什么,我们来详细分析一下。(Android的输入系统处理了很多事件,包括按键,触摸,以及外接设备,但是我们这篇文章只分析我们最熟悉也是最常用的触摸事件,这里的描述也许不太精确,但是却最为直观)

我们先上一个总体流程图

注:上图中绿色线条表示默认的事件处理流程,即我们没有做任何处理,事件会按照绿色线条所示的方向由Activity->...ViewGroup..->View->...ViewGroup..->Activity这个U型图进行传递。即一直默认调用super.XXX方法。

上图中黑色线条表示默认Activity->...ViewGroup..->View->...ViewGroup..->Activity这个U型图的任一节点中(不包括onInterceptTouchEvent)返回了true,事件即结束,不再向下一节点传递。

上图中红色线条表示一些特殊情况,尤其是ViewGroup,ViewGroup.onInterceptTouchEvent表示询问当前ViewGroup是否需要拦截此事件即要不要处理,为什么要“多此一举”呢,因为ViewGroup.dispatchTouchEvent这个函数的特殊,从上图可知,该函数返回true,是消费事件,返回false是交由上一级的ViewGroup或者Activity的onTouchEvent。那么它怎么向下传递事件或者想把事件交给自己的onTouchEvent处理呢ÿ[\]PS OT.`Y] yQ\\9l,y+Y] IY] Y] IY]\H\\Y[Y L[OHOiY]9kdY].y..`9oe[Q\\ PS[H[OH \N[\][\][KZZY[\]PS OT[H[OH \N[\][\][KZZY[\].gi9y"ykdY].yi9.Q\\9..[8d#PS OS_PS[H[OH \N[\][\][KZZY[\]T9.&.yk.". 9iy.+yQ\\:/c9b!c ".[ , -clY]\]][ +l9az`&ab9b)9S\[\/knm, \[\y.yk//9a+ dY]9][9yX#y..[ b&y.ykQ\\:dj:/c9b!c#PS OS_PS9. O [OH \N[\][\][KZZY[\]\] K[N\X K[Nn#9&!z &acy."ghb!8/h9. 9k/&"y-#[OH \N[\][\][KZZY[\]ZY \\] K\[N\X K\[N\\YN\XN\[YN\]\[N\Y\]X MK MK MJN[OH \N[\][\][KZZY[\]\] K[N\X K[N[OH \N[\][\][KZZY[\]."9db 9g*9."+y$y.!/c9k&:hny.g$y.cya9kfayn9 z+9ioI[OH \N[\][\][KZZY[\][H[OH \N[\][\][KZZY[\]."oaIi9.:(c O ."&!$y.,yiO[OH \N[\][\][KZZY[\]!.bUY] nmay+99ai/ez)9a)`9+*z/Y]d[OH \N[\][\][KZZY[\]ZY \\] K\[N\X K\[N\\YN\XN\[YN\]\[N\Y\]X MK MK MJN[OH \N[\][\][KZZY[\]\] K[N\X K[Ni:!k9  X[[OH^ X[Y\[Y\H[Y[ZZ[XZZ[[^][KM KNMXMXM YL[OH KN Z[\[\Y M M MH [H [H Y[H ZY KN Z[\[ [OH^ X[Y\  ]

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP