如何锁定 ViewPager 一次只允许单页滑动
How to lock ViewPager to allow only a single page swipe at once
默认情况下,当您滑过 ViewPager 时,您可以滑过尽可能多的页面,直到手指到达屏幕末端。那么,是否可以强制ViewPager无论用户滑动多少都只允许改变一页?
这就是我在寻呼机上滑动直到手指到达屏幕末端的意思:
这就是我将 ViewPager 锁定为一次只允许滑动一个页面的意思:
谢谢。
好的,我认为答案是:扩展 ViewPager
并覆盖 onTouchEvent(MotionEvent ev)
。
private Rect viewRect = new Rect();
@Override
public boolean onTouchEvent(MotionEvent event) {
getHitRect(viewRect);
if (viewRect.contains(
Math.round(view.getX() + event.getX()),
Math.round(view.getY() + event.getY()))) {
// touch is inside, do normal behavior
return super.onTouchEvent(event);
} else {
// touch is outside, consume the event & do nothing
return true;
}
}
很遗憾,现在没有时间真正测试它,我稍后会更新。
最后还是在adapter里面做了。我所做的是在 getCount
方法中返回 2
,在选择后重新排列项目,并特别处理使用当前位置(0 或 1)访问数据集中的项目的情况。
默认情况下,当您滑过 ViewPager 时,您可以滑过尽可能多的页面,直到手指到达屏幕末端。那么,是否可以强制ViewPager无论用户滑动多少都只允许改变一页?
这就是我在寻呼机上滑动直到手指到达屏幕末端的意思:
这就是我将 ViewPager 锁定为一次只允许滑动一个页面的意思:
谢谢。
好的,我认为答案是:扩展 ViewPager
并覆盖 onTouchEvent(MotionEvent ev)
。
private Rect viewRect = new Rect();
@Override
public boolean onTouchEvent(MotionEvent event) {
getHitRect(viewRect);
if (viewRect.contains(
Math.round(view.getX() + event.getX()),
Math.round(view.getY() + event.getY()))) {
// touch is inside, do normal behavior
return super.onTouchEvent(event);
} else {
// touch is outside, consume the event & do nothing
return true;
}
}
很遗憾,现在没有时间真正测试它,我稍后会更新。
最后还是在adapter里面做了。我所做的是在 getCount
方法中返回 2
,在选择后重新排列项目,并特别处理使用当前位置(0 或 1)访问数据集中的项目的情况。