三个方法:
public boolean dispatchTouchEvent(MontionEvent event)
public boolean onInterceptTouchEvent(MontionEvent event)
puclic boolean onTouchEvent(MontionEvent event)
关系:
//伪代码
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if(onInterceptTouchEvent(ev)) {
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
对于这三者关系的理解:
对于一个根ViewGroup,点击事件产生后,首先会传递给它,这时它的dispatchTouchEvent就会被调用,如果当前的这个ViewGroup的onInterceptTouchEvent方法返回true就表示它要拦截当前事件,接着事件就会交给这个ViewGroup处理,即它的onTouchEvent方法就会被调用;如果这个这个ViewGroup的onInterceptTouchEvent方法返回false就表示它不拦截当前事件,这时当前事件就会继续传递给它的子元素,接着子元素的dispatchTouchEvent方法就会被调用,如此反复直到事件被最终处理。
--出自《Android 开发艺术探索》