Viewpager和Scollview是官方给我们带来的滑动控件,可以说在项目中是不可缺少的,使用简单但是也困扰了很多人 。
主要出现的问题有:
1.ViewPager左右不能滑动
2.如果在水平方向上的偏移量较垂直方向上的偏移量不是太大的时候,会有明显的ScrollView滚动问题
首先我们要明确,这是滑动带来的问题,那我们就从滑动入手,最好的办法就是使用view事件分发机制来解决,我用的是事件分发的onTouchEvent处理事件,监听手指按下的时候,每次操作只分发一个事件。
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.MotionEvent;
public class MyViewPager extends ViewPager{
float curX = 0f;
float downX = 0f;
OnSingleTouchListener onSingleTouchListener;
public MyViewPager(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
curX = ev.getX();
// TODO Auto-generated method stub
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
downX = curX;
}
int curIndex = getCurrentItem();
if (curIndex == 0) {
if (downX <= curX) {
getParent().requestDisallowInterceptTouchEvent(false);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
} else if (curIndex == getAdapter().getCount() - 1) {
if (downX >= curX) {
getParent().requestDisallowInterceptTouchEvent(false);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(ev);
}
public void onSingleTouch() {
if (onSingleTouchListener != null) {
onSingleTouchListener.onSingleTouch();
}
}
public interface OnSingleTouchListener {
public void onSingleTouch();
}
public void setOnSingleTouchListner(
OnSingleTouchListener onSingleTouchListener) {
this.onSingleTouchListener = onSingleTouchListener;
}
}