只能单向滑动的ViewPager

4

我的应用程序中有一个ViewPager,我想随时禁用/允许向右滑动。ViewPager中的每个视图都包含一个ListView。我该如何做到这一点?我正在尝试以下方法:

private int oldX;
private int deltaX = 0;

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_MOVE || motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        int newX = (int) motionEvent.getX();
        deltaX = oldX - newX;
        oldX = newX;
    }
    if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
        oldX = 0;
    }
    return deltaX < 0;        
}

但是视图仍然向右移了一点。有人解决过同样的问题吗?
1个回答

12

我通过将ViewPager的代码添加到我的应用程序并添加以下内容,实现了单侧滚动。

private boolean performDrag(float x) {
    boolean needsInvalidate = false;

    final float deltaX = mLastMotionX - x;
    mLastMotionX = x;

    // MY CODE STARTS
    if (deltaX < 0) {
        return false;
    }
    // MY CODE ENDS

    float oldScrollX = getScrollX();
    ...

它似乎工作得很好。唯一需要注意的是,您可能需要获取适配器代码或提供自己的适配器,因为ViewPager在其代码中使用的某些方法不是从PagerAdapter公开的。


1
非常感谢。它有效了!我学了整个课程并在我的项目中使用了它。 - Jan Muller
1
使用您的应用程序包。是的,您可以重命名它们,只需不要忘记在布局文件中进行适当更改即可。 - sandrstar
@SubinSebastian 我将视图翻页器类复制到我的项目中,并使用不同的名称。现在我遇到了与您相同的问题(转换为Dalvik格式失败:无法执行dex:java.nio.BufferOverflowException)。您是如何解决的?能帮忙吗...谢谢 - Harsh
@Harsh 你也改变了包名吗? - sandrstar
1
@sandrstar 我刚刚在我的project.properties文件中添加了sdk.buildtools=18.1.1来解决这个问题。对我有用。谢谢,我投票支持这个答案。 - Harsh
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接