前段时间做项目碰到在ScrollView里添加ViewPager,但是发现ViewPager的左右滑动和ScrollView的滑动冲突了,解决这个问题的方法是重写ScrollView。
代码:
1 public class CustomScrollView extends ScrollView { 2 3 private GestureDetector mGestureDetector; 4 View.OnTouchListener mGestureListener; 5 6 public CustomScrollView(Context context, AttributeSet attrs) { 7 super(context, attrs); 8 mGestureDetector = new GestureDetector(context, new YScrollDetector()); 9 } 10 11 public CustomScrollView(Context context, AttributeSet attrs, int defStyle) { 12 super(context, attrs, defStyle); 13 mGestureDetector = new GestureDetector(context, new YScrollDetector()); 14 } 15 16 public CustomScrollView(Context context) { 17 super(context); 18 mGestureDetector = new GestureDetector(context, new YScrollDetector()); 19 } 20 21 @Override 22 public boolean onInterceptTouchEvent(MotionEvent ev) { 23 return super.onInterceptTouchEvent(ev) 24 && mGestureDetector.onTouchEvent(ev); 25 } 26 27 // Return false if we're scrolling in the x direction 28 class YScrollDetector extends SimpleOnGestureListener { 29 @Override 30 public boolean onScroll(MotionEvent e1, MotionEvent e2, 31 float distanceX, float distanceY) { 32 if (Math.abs(distanceY) > Math.abs(distanceX)) { 33 return true; 34 } 35 return false; 36 } 37 } 38 39 }