图解Android事件传递之ViewGroup篇

 本篇文章主要讲述ViewGroup中关于触摸事件传递的相关逻辑。主要梳理一下dispatchTouchEvent函数。

一些知识点

  • FLAG_DISALLOW_INTERCEPT,可以使用requestDisallowInterceptTouchEvent来设置ViewGroup的这个标记位,让ViewGroup不拦截事件。
  • ViewGroup只会将触摸事件转发给那些可见并且触摸事件发生在其可视范围内的子View
  • 如果一个子View没有接收ACTION_DOWN事件,那么这个事件系列的ACTION_MOVE或者ACTION_UP事件根本不会传递给它
  • 关于ViewGroup拦截与否消费与否的判断,只要记住一点就可以轻易判断:1 ViewGroup是否最终没有消费触摸事件(无论是自己自己消费,还是分发给子view消费),决定之后的触摸事件是否会再转发给它。

dispatchTouchEvent的主流程
dispatchTouchEvent中遍历child分发事件的逻辑

转换触摸事件并分发的过程-dispatchTransformedTouchEvent

更详细的源代码请查看我的github

关于图片和转载

知识共享许可协议
本作品采用知识共享署名 4.0 国际许可协议进行许可。 转载时请注明原文链接,图片在使用时请保留图片中的全部内容,可适当缩放并在引用处附上图片所在的文章链接。

关于评论和留言

如果对本文 图解Android事件传递之ViewGroup篇 的内容有疑问,请在下面的评论系统中留言,谢谢。

原文链接:图解Android事件传递之ViewGroup篇

Follow: Ztelur · GitHub

历小冰

君子不器