一、拥有事件传递能力的类
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高级进阶》。