重寫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;
}