重写dispatchTouchEvent,并且要在按下的时候
getParent().requestDisallowInterceptTouchEvent(true);
一、竖直方向移动
getParent().requestDisallowInterceptTouchEvent(false);
二、水平方向移动
1、当滑动到viewpager的第0个页面,并且是从左往右移动
getParent().requestDisallowInterceptTouchEvent(false);
2、当滑动到viewpager的最后一个页面,并且是从右往左移动
getParent().requestDisallowInterceptTouchEvent(false);
3、其他
getParent().requestDisallowInterceptTouchEvent(true);
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
//记录起始坐标
startX = ev.getX();
startY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
//来到新的坐标
float endX = ev.getX();
float endY = ev.getY();
//计算偏移量
float distanceX = endX - startX;
float distanceY = endY - startY;
//判断滑动方向
if(Math.abs(distanceX) > Math.abs(distanceY)){
if(getCurrentItem()==0&&distanceX >0){
getParent().requestDisallowInterceptTouchEvent(false);
}
else if((getCurrentItem()==(getAdapter().getCount()-1))&& distanceX <0){
getParent().requestDisallowInterceptTouchEvent(false);
}
else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}else{
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}