public class HorizontalScrollViewPager extends ViewPager {
public HorizontalScrollViewPager(Context context) {
this(context,null);
}
public HorizontalScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
private float startX;
private float startY;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
//一定要先把事件给自己
getParent().requestDisallowInterceptTouchEvent(true);
//1.记录起始坐标
startX = ev.getRawX();
startY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
//1.来到新的坐标
float endX = ev.getRawX();
float endY = ev.getRawY();
//2.计算偏移量
float distanceX = endX - startX;
float distanceY = endY - startY;
//3.判断滑动方向
if(Math.abs(distanceX) > Math.abs(distanceY)){
//水平方向滑动
// 1.如果第0个位置,并且滑动方向是从左到右滑动
// getParent().requestDisallowInterceptTouchEvent(false);
if(getCurrentItem()==0 && distanceX > 0){
getParent().requestDisallowInterceptTouchEvent(false);
}
//
// 2.如果是页签页面的最后一个位置,并且滑动方向是从右向左滑动
// getParent().requestDisallowInterceptTouchEvent(false);
//
else if(getCurrentItem() == (getAdapter().getCount()-1) && distanceX <0){
getParent().requestDisallowInterceptTouchEvent(false);
//请求父控件不要拦截为false,则由父控件获得触摸事件
}
// 3.其他中间部分
// getParent().requestDisallowInterceptTouchEvent(true);
else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}else{
//竖直方向滑动
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
}
return super.dispatchTouchEvent(ev);
}
}
两个ViewPager嵌套
最新推荐文章于 2025-05-17 16:41:46 发布