Android事件传递机制

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

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

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

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

Android事件传递机制_第1张图片
布局结构

二、事件分发

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

Android事件传递机制_第2张图片
事件分发顺序

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

Android事件传递机制_第3张图片
事件分发机制流程图

三、事件消费

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

Android事件传递机制_第4张图片
事件消费顺序

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

Android事件传递机制_第5张图片
事件处理流程图

四、requestDisallowInterceptTouchEvent方法

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


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

你可能感兴趣的:(Android事件传递机制)