事件分发是安卓中非常重要的一个交互机制,是用户和界面交互的基础。Android中与事件分发相关的方法主要包括dispatchTouchEvent(事件分发)、onInterceptTouchEvent(事件拦截)、onTouchEvent(事件消费)三个方法.
- 分发: dispatchTouchEvent如果返回true,则表示在当前View或者其子View(子子…View)中,找到了处理事件的View;反之,则表示没有寻找到
- 拦截: onInterceptTouchEvent如果返回true,则表示这个事件由当前View进行处理,不管处理结果如何,都不会再向子View传递这个事件;反之,则表示当前View不主动处理这个事件,除非他的子View返回的事件分发结果为false
- 处理: onTouchEvent如果返回true,则表示当前View就是事件传递的终点;反之,则表示当前View不是事件传递的终点
如下图:
也就是说当一个事件到来的时候,当前View的dispatchTouchEvent方法 会被调用,在内部首先调用 onInterceptTouchEvent 判断是否拦截,如果拦截,将事件传递给自己的 onTouchEvent 对事件进行处理。如果不拦截,就将事件传递给子View,调用 子View的dispatchTouchEvent方法,一直到事件被消费。