Android 事件分发流程

image.png

想要自定义控件交互性的手势中用的比较多,那么就要理解事件的分发机制,网络上大部分的介绍其实也不太让人看的明白,所以我尝试用我的理解来为大家写一篇通俗易懂的文章,首先必须知道
ViewGroup 所拥有的三个方法 dispatchTouchEvent - > onInterceptTouchEvent - > onTouchEvent
View 作为最小单元 所以不触发onInterceptTouchEvent 那么只有dispatchTouchEvent - > onTouchEvent
Activity 也有 dispatchTouchEvent - > onTouchEvent,它是Window层分发下来的 我们开始说执行流程

以触发DOWN事件为例
dispatchTouchEvent 返回状态
super.dispatchTouchEvent(ev) 表示事件继续分发,如果当前是视图组会触发 onInterceptTouchEvent
true 表示处理了事件,那么不再继续向下层控件分发事件, 所有传递到此为止
false 表示不处理这个事件,那么会触发上层控件onTouchEvent

onInterceptTouchEvent 返回状态
super.onInterceptTouchEvent(ev) 效果等同于返回false 事件不进行拦截 会继续向下分发事件
true 事件拦截,如果当前是视图组会触发 onTouchEvent

onTouchEvent 返回状态
super.onTouchEvent(ev) 效果等同于返回false 事件执行 会向上层视图回调
true 事件消费 终止事件传递

以视图组为例 上面为activity 下面有一个View
super.dispatchTouchEvent(ev) --> super.onInterceptTouchEvent(ev) --> super.onTouchEvent(ev)


image.png

true --> super.onInterceptTouchEvent(ev) --> super.onTouchEvent(ev)


image.png

false --> super.onInterceptTouchEvent(ev) --> super.onTouchEvent(ev)


image.png

这就是它事件传递时触发流程了, 除了dispatchTouchEvent,其他两种要么消费要么不消费很容易,只不过它多了一个super状态触发拦击方法

下一篇给大家分析它里面源码,为什么是这个流程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容