【问题标题】:One side ViewPager swiping only一侧 ViewPager 仅滑动
【发布时间】:2012-09-05 07:50:49
【问题描述】:

我的应用程序中有一个 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;        
}

但是视图仍然会向右一点。有人在解决同样的问题吗?

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    通过将 ViewPager 的代码放入我的应用程序并添加以下内容,我能够在 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 公开的。

    【讨论】:

    • 非常感谢。有用!我上了一堂课,并在我的项目中使用了它。
    • @sandrstar,我尝试将 ViewPager 和 PagerAdapter 类复制到我的应用程序中。但是在构建我的应用程序时出现“无法转换为 dalvik 格式”错误。将这些类复制到我的项目后,我应该重命名它们吗?我应该使用什么包名?
    • 使用您的应用程序包。而且,是的,您可以重命名它们,只是不要忘记在布局文件中进行适当的更改。
    • @SubinSebastian 我将视图寻呼机类复制到我的项目中,但名称不同。现在我面临和你一样的问题(转换为 Dalvik 格式失败:无法执行 dex:java.nio.BufferOverflowException)。你是怎么解决的?你能帮忙吗...谢谢
    • @sandrstar 我刚刚将 sdk.buildtools=18.1.1 添加到我的 project.propertis 文件中以解决此问题。它对我有用。谢谢伙计,我投票给了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多