以前在做项目的时候遇到过ViewPager嵌套viewpager的问题,会出现里面的viewPager响应不到它的滑动事件,出列这样问题的原因其实是事件冲突造成的,解决的方法是我们要自定义里面的viewpager,重写它的dispatchTouchEvent方法,然后我们在布局文件里定义里面的viewpager时就不要用v4包里的viewpager了,要用我们自己的viewpager,好了,不多说直接上代码:
//自定义的viewPager
public class MyViewPager extends ViewPager {
private float x;
private float y;
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录按下时候的坐标
x = ev.getX();
y = ev.getY();
// 通知其父控件,现在进行的是本控件的操作,不允许拦截
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
float x2 = ev.getX();
float y2 = ev.getY();
if(Math.abs(x2-x)>Math.abs(y2-y)){
getParent().requestDisallowInterceptTouchEvent(true);
}else{
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
}
return super.dispatchTouchEvent(ev);
}
}