自定义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