事件的分发、消费机制在Activity,ViewGroup,View中进行实现,其中ViewGroup中多了一个事件拦截机制其实现方法如图:
Touch事件三种方法的理解:
/**
* 1.事件分发
* 返回系统默认情况下,以隧道形式 从根元素一次向下传递
* 返回 true 表示触摸事件已经被消费掉了 将不在向下分发
* 返回 false
*
* @param ev
* @return
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
/**
* 事件消费
* 最底层的元素由优先处理事件的权限
* 1.系统默认情况 false 以冒泡行 从底元素依次向上传递
* 2.返回true 表示事件已经消费掉了,将不在向上传递
*
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
/**
*
* @param ev
* @return true 表示拦截事件,事件将不在向下分发
* 系统默认,false 事件向下分发
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
以下是Touch触摸事件时系统默认的流程图: