Android事件拦截机制

我们知道Android的View是一个树型结构,ViewGroup之下可以再由ViewGroup也可以再有View。而Android的事件既是按照这个树型结构去传递和处理的。

Android的事件机制可以分割为分发、处理两段。


一、事件分发

事件分发过程中有两个关键方法
dispatchTouchEvent 分发事件
onInterceptTouchEvent 拦截事件(此方法只出现在ViewGroup中,View中没有)

当一个事件被触发首先会从根节点开始按照dispatchTouchEvent >>> onInterceptTouchEvent(如果有的话)的顺序去执行,
若是onInterceptTouchEvent返回true,则会拦截下事件,直接由当前这个层级的节点去选择是否处理事件,不再向下层传递。

二、事件处理

事件的处理,实际上就是我们非常熟悉的onTouchEvent方法。
前面说到一个事件被触发会按照dispatchTouchEvent >>> onInterceptTouchEvent(如果有的话)的顺序去执行,而执行到最底层节点将dispatchTouchEvent >>> onInterceptTouchEvent(如果有的话)执行完后则会执行这个节点的onTouchEvent方法来处理事件。这时该最底层节点有两个选择:

1、处理这个事件。(onTouchEvent返回true)

2、交给上层去处理(onTouchEvent返回false)。

如果选择返回True,那么这个事件就到此为止了,如果选择返回False,则会将这个事件回传会上层的onTouchEvent。这时上层就要面临相同的两个选择了。

三、总结

知道了上诉事件的分发和处理流程后就可以知道,Android的事件可总结为以下流程:
dispatchTouchEvent >
onInterceptTouchEvent(如果有的话) (如果返回true,则不再分发)>
dispatchTouchEvent >
onInterceptTouchEvent(如果有的话) >
onTouchEvent (如果返回true,则不再传递)>
onTouchEvent

你可能感兴趣的:(Android事件拦截机制)