ScrollView 嵌入VIewPager后,滑动事件会出现冲突的现象,ViewPager就变得不好使了,此时最主要的还是外层的ScrollView,思路是通过自定义视图,截取滑动事件,根据滑动的x和y的距离来判断手势倾向横向还是纵向,代码如下:
public class MyScrollView extends ScrollView {
/** 是否可以滚动 */
private boolean isCanScroll;
/** 手势滑动对象 */
private GestureDetector mGestureDetector;
public MyScrollView(Context context) {
this(context, null);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (isCanScroll) {
// 根据当前滑动的X,Y距离来判断手势滑动的主要方向
isCanScroll = Math.abs(distanceY) >= Math.abs(distanceX);
}
return isCanScroll;
}
});
isCanScroll = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_UP) {
isCanScroll = true;
}
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
}
若大家还有其他的方法,请不吝指教。