View的事件分发

看了《Android开发艺术探索》加上自己的一些实践,对View的事件分发做个总结记录:

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        boolean isConsumed = false;
        if(onInterceptTouchEvent(ev)){
            isConsumed = onTouchEvent(ev);
        }else{
            isConsumed = child.dispatchTouchEvent(ev);
        }
        return isConsumed;
    }

1、ViewGroup有dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent,View则没有onInterceptTouchEvent这个方法;
2、如果ViewGroup的onInterceptTouchEvent返回true,则事件不会传递给子View,事件会传递给当前ViewGroup的onTouchEvent方法去处理;如果ViewGroup的onInterceptTouchEvent返回false,那么事件则会继续往下传递给子View,这时候不会回调ViewGroup的onTouchEvent方法。
3、如果View设置了OnTouchListener,则如果Listener的onTouch返回了true,则View的onTouchEvent方法不会被回调,如果onTouch返回false,则View的onTouchEvent方法会被回调;
4、如果View的onTouchEvent方法返回false,那么这个View的父容器的onTouchEvent会被调用。

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