自定义View滑动冲突处理

作者: yolo_cc | 来源:发表于2017-08-05 16:20 被阅读74次
    最近在做一个自定义View是用来滑动选取颜色的大致如下:

    在普通情况下滑动没有问题,但是在和ViewPager嵌套使用时,发现不流畅,时常滑着滑着就变成ViewPager的滑动了,进过打点分析发现onTouchEvent方法经常走MotionEvent.ACTION_CANCEL事件导致的,原来是ViewPager会接入这个滑动事件导致的,后来发现系统的Seekbar不会出现这样的问题,仔细找了下原因发现SeekBar父类里面有如下代码:

    /**
         * Tries to claim the user's drag motion, and requests disallowing any
         * ancestors from stealing events in the drag.
         */
        private void attemptClaimDrag() {
            if (mParent != null) {
                mParent.requestDisallowInterceptTouchEvent(true);
            }
        }
    

    方法是用来子View告诉父容器不要拦截我们的事件的。原来问题出在这,所以我们只要在onTouchEvent方法的MotionEvent.ACTION_DOWN MotionEvent.ACTION_MOVE: 这两个事件中调用这个方法就可以啦。

    相关文章

      网友评论

      • b973150428c2:为啥不在这里写出来你分析源码的过程,难道重要的地方都是可意会不可言传:joy::joy::joy:

      本文标题:自定义View滑动冲突处理

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