您的位置:首页 > 其它

解决ScrollView嵌套viewpager滑动事件冲突问题

2016-03-03 12:14 597 查看
重写ScrollView

第一种方案能解决viewpager的滑动问题,但是scrollView有时会滑不动

public class VerticalScrollView extends ScrollView {

private GestureDetector mGestureDetector;

public VerticalScrollView(Context context, AttributeSet attrs){
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
}

@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) {
/**
* if we're scrolling more closer to x direction, return false, let subview to process it
*/
HBLog.i("VerticalScrollView", distanceY+"----"+distanceX);
return (Math.abs(distanceY) > Math.abs(distanceX));
}
}

}


第二种方案能够解决上面的问题

public class VerticalScrollView extends ScrollView {

private float xDistance, yDistance, xLast, yLast;

public VerticalScrollView(Context context) {
super(context);
}

public VerticalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();

xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;

if (xDistance > yDistance) {
return false;
}
}
return super.onInterceptTouchEvent(ev);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: