public boolean dispatchTouchEvent ( MotionEvent ev ) 事件分发方法
public boolean onInterceptTouchEvent ( MotionEvent event ) 事件拦截方法
public boolean onTouchEvent ( MotionEvent event ) 处理点击事件方法(在dispatchTouchEvent方法中调用)
对于一个根ViewGroup来说,点击事件产生后,首先会传递给它,这时它的dispatchTouchEvent就会被调用,如果这个ViewGroup的onInterceptTouchEvent方法返回true,就表示它要拦截当前事件,接着事件就会交给这个ViewGroup处理,即它的onTouchEvent就会被调用,如果这个ViewGroup的onInterceptTouchEvent方法返回false就表示它不拦截当前事件,这时当前事件就会继续传递给它的子元素,接着子元素的dispatchTouchEvent方法就会被调用,如此反复直到事件被最终处理。下面伪代码很形象的说明了它们三个方法之间的关系:
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if (onInterceptTouchEvent(ev)) { //拦截
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev); //下发
}
return consume;
}