当我们在开发中,难免会遇到一个页面同时存在MyScrollView和Viewpager,这时我们会发现viewpager页面滑动很吃力,滑动不畅的问题,这是因为当我们水平滑动发生倾斜,这时事件就会被scrollView截获,而ViewPager则不能得到事件,所以我们要解决这个问题,必须自定义一个MyScrollView继承ScrollView,把布局中的scrollview换成我们自定义的scrollview即可,下面是代码:
public class MyScrollView extends MyScrollView {
private GestureDetector mGestureDetector;
public MyScrollView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyScrollView (Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
}
public MyScrollView (Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
/**
* 如果我们滚动更接近水平方向,返回false,让子视图来处理它
*/
return (Math.abs(distanceY) > Math.abs(distanceX));
}
}
}