美文网首页
[安卓开发日记] View的事件分发

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

作者: chopperhl | 来源:发表于2020-04-14 15:17 被阅读0次

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

    相关文章

      网友评论

          本文标题:[安卓开发日记] View的事件分发

          本文链接:https://www.haomeiwen.com/subject/jysgphtx.html