Android事件传递机制

一、拥有事件传递能力的类

Activity:拥有dispatchTouchEvent和onTouchEvent两个方法。

GroupView:拥有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法。

View:拥有dispatchTouchEvent和onTouchEvent两个方法。

布局结构

二、事件分发

主要使用dispatchTouchEvent方法进行事件分发,事件分发的顺序如果下图。

事件分发顺序

不过在ViewGroup层可以通过onInterceptTouchEvent方法进行事件拦截。onInterceptTouchEvent为false表示不拦截,反之表示拦截。如果ViewGroup进行事件拦截,整个事件的分发将不再向下传递。 

事件分发机制流程图

三、事件消费

主要使用onTouchEvent方法进行事件消费,事件消费顺序如下图。

事件消费顺序

onTouchEvent方法返回true表示该层控件消耗此事件,如果返回为false则表示该层控件不消耗此事件,事件自动向上抛出。

事件处理流程图

四、requestDisallowInterceptTouchEvent方法

在子控件中使用getParent().requestDisallowInterceptTouchEvent(true)方法,表示子控件请求父控件不要消费该事件,不过如果父控件中明确使用onInterceptTouchEvent进行事件拦截,该方法将不会起到任何作用。


提示:本文知识引用来源于https://www.cnblogs.com/smyhvae/p/4802274.html和《Android高级进阶》。

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

相关阅读更多精彩内容

友情链接更多精彩内容