理解点击事件的事件分发过程

三个方法:

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 开发艺术探索》

猜你喜欢

转载自blog.csdn.net/qq_30837235/article/details/74455013