[安卓开发日记] View的事件分发

2020-04-14  本文已影响0人  chopperhl

一、dispatchTouchEvent(MotionEvent event)

事件是否向下传递,如果返回true,表示事件会继续向下传递,父View会在后续的MOVE和UP事件继续调用该View的dispatchTouchEvent,一般当前View也会在该方法中调用子View的dispatchTouchEvent。如果返回false,表示事件不会继续向下传递。当前view只会收到ACTION_DOWN的dispatchTouchEvent调用,不会收到后续调用。

非容器的View默认会在该方法中调用onTouchEvent(View 的默认实现)

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                Log.d("VIEW", "DISPATCH --> ACTION_UP");
                break;
            case MotionEvent.ACTION_DOWN:
                Log.d("VIEW", "DISPATCH --> ACTION_DOWN");
                break;
            case MotionEvent.ACTION_SCROLL:
                Log.d("VIEW", "DISPATCH --> ACTION_SCROLL");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d("VIEW", "DISPATCH --> ACTION_MOVE");
                break;
        }
        return super.dispatchTouchEvent(event);
    }

二、onInterceptTouchEvent(MotionEvent e)

是否拦截事件,如果返回true,则不会调用子View的任何onTouchEvent事件(包括ACTION_DOWN),
如果不拦截则事件可以继续向下传递

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
        return false;
}

三、onTouchEvent(MotionEvent event)

onTouchEvent从最上层的View开始向父View依次被调用(View的dispatchTouchEvent方法) ,返回false 表示当前view不需要消费事件,会继续调用父View的onTouchEvent方法 ; 返回true表示当前View需要消费事件,父View的onTouchEvent不会再被调用。

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                Log.d("VIEW", "ON_TOUCH --> ACTION_UP");
                break;
            case MotionEvent.ACTION_DOWN:
                Log.d("VIEW", "ON_TOUCH --> ACTION_DOWN");
                break;
            case MotionEvent.ACTION_SCROLL:
                Log.d("VIEW", "ON_TOUCH --> ACTION_SCROLL");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d("VIEW", "ON_TOUCH --> ACTION_MOVE");
                break;
        }

        return true;

    }
上一篇下一篇

猜你喜欢

热点阅读