/**
* 头条新闻的ViewPager
*/
public class TopNewsViewPager extends ViewPager {
private int startX;
private int startY;
public TopNewsViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TopNewsViewPager(Context context) {
super(context);
}
//1. 上下滑动,需要拦截
//2. 左划时, 最后一个页面需要拦截
//3. 右划时, 第一个页面需要拦截
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//请求父控件不拦截事件
getParent().requestDisallowInterceptTouchEvent(true);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//按下
startX = (int) ev.getX();
startY = (int) ev.getY();
break;
case MotionEvent.ACTION_MOVE:
//移动
int endX = (int) ev.getX();
int endY = (int) ev.getY();
int dx = endX - startX;
int dy = endY - startY;
if (Math.abs(dx) > Math.abs(dy)) {
//左右滑动
int currentItem = getCurrentItem();
if (dx > 0) {
//右划
if (currentItem == 0) {
getParent().requestDisallowInterceptTouchEvent(false);
}
} else {
//左划
//getChildCount()
int count = getAdapter().getCount();//当前viewpager item总数
if (currentItem == count - 1) {
getParent().requestDisallowInterceptTouchEvent(false);
}
}
} else {
//上下滑动
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
}