解决screview与子view滑动冲突
在android开发过过程中,经常会用到ScrollView,在布局中ScorellView会放许多子View。
我们都知道ScrollView是可以滑动的,而有时放的一些子View也是可以滑动的,比如:ListView、ViewFlow...,这样就很容易造成滑动事件的冲突,
本文是在ScrollView中放了ViewFlow的情况下。
用一个类去继承ScrollView,并重写ScrollView的onInterceptTouchEvent事件
1 public class ScrollViewExtend extends ScrollView { 2 3 private float xDistance, yDistance, xLast, yLast; 4 5 public ScrollViewExtend(Context context, AttributeSet attrs) { 6 super(context, attrs); 7 } 8 9 @Override 10 public boolean onInterceptTouchEvent(MotionEvent ev) { 11 12 // 通过滑动的幅度大小来判断是上下滑动还是左右滑动 13 switch (ev.getAction()) { 14 case MotionEvent.ACTION_DOWN: 15 xDistance = yDistance = 0f; 16 xLast = ev.getX(); 17 yLast = ev.getY(); 18 break; 19 case MotionEvent.ACTION_MOVE: 20 final float curX = ev.getX(); 21 final float curY = ev.getY(); 22 23 xDistance += Math.abs(curX - xLast); 24 yDistance += Math.abs(curY - yLast); 25 xLast = curX; 26 yLast = curY; 27 if (xDistance > yDistance) { 28 return false; 29 } 30 } 31 32 return super.onInterceptTouchEvent(ev); 33 } 34 35 }