对Android之事件分发机制的理解

事件分发机制 中的三种方法dispatchTouchEvent()  onInterceptTouchEvent()  onTouchEvent()

dispatchTouchEvent(),事件的分发方法,一般由父布局调用,将点击事件传递到子View。返回true,代表事件被消费;返回false,表示事件未被消费,事件会继续传递下去。

onInterceptTouchEvent(),是否拦截点击事件,如果返回true,表示拦截事件,调用自身onTouchEvent()处理点击事件;如果返回false,不拦截点击事件,则将点击事件传递到子View。

onTouchEvent(),处理点击事件的具体方法

顺序传递activity--viewgroup--view

点击activity调用activity.dispatchTouchEvent()方法,①返回true,代表事件被消费,不会往下传递,事件分发结束
②返回false表示事件未被消费,事件会继续传递下去;调用viewgroup.dispatchTouchEvent()方法,然后会调用viewgroup.oninterceptTouchEvent()方法,返回true,表示拦截事件,调用viewgroup自身onTouchEvent()处理点击事件;如果返回false,不拦截点击事件,则将点击事件传递到子View。调用子view.dispatchTouchEvent()方法


注意:

①View类和Activity类中仅仅有dispatchTouchEvent()和onTouchEvent()两个方法,并没有onInterceptTouchEvent()方法;上述三个方法在ViewGroup中都存在

②事件虽然是从Activity向底层View传递,在不考虑ViewGroup拦截事件的情况下,最先处理事件(onTouchEvent)的是底层View,如果事件未被底层View消费,事件将会回传给上层的ViewGroup处理(onTouchEvent),若所有的ViewGroup都未消费事件,事件最终会回传到Activity由它做最后的处理(onTouchEvent)。

③事件在传递过程中,如果被ViewGroup拦截(onInterceptTouchEvent),该ViewGroup会优先处理该事件。

④底层的View或者ViewGroup如果将事件消费了,上层的ViewGroup的OnTouchListener、OnTouchEvetn,OnClickListener都不会被调用。

⑤在同一个View或者ViewGroup的事件处理中,OnTouchListener优先级最高,OnTouchEvent其次,OnClickListener最低。

 

 

对Android之事件分发机制的理解_第1张图片

你可能感兴趣的:(Android事件分发机制)