View的事件分发机制

View的事件分发机制_第1张图片

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;
    }

你可能感兴趣的:(View的事件分发机制)