在普通情况下滑动没有问题,但是在和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: 这两个事件中调用这个方法就可以啦。