我在viewpager上使用3个片段,我也有3个操作栏选项卡。
我可以通过单击标签或在标签下方滑动来更改页面。

如果满足以下条件,动画将非常流畅:


通过单击操作栏选项卡更改页面
如果我的手指缓慢向左或向右移动以更改页面
如果我的手指移动缓慢,则将手指从屏幕上移开(回到先前的屏幕)


但是问题是当我快速滑动手指时,前一页和后一页之间的过渡会有一些停顿的时间,尽管它刚好不到1秒。

我只使用普通的viewpager和自定义滚动条来降低动画速度。这是我的代码

主要活动:

viewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(3);


try {
      Field mScroller;
      mScroller = ViewPager.class.getDeclaredField("mScroller");
      mScroller.setAccessible(true);
      myScroller scroller = new myScroller(viewPager.getContext(), new DecelerateInterpolator());
      mScroller.set(viewPager, scroller);
    } catch (NoSuchFieldException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    }


我需要帮助来使页面之间的过渡顺利进行,并且如果可能的话,我宁愿不使用外部的其他lib(例如:jazzy view pager)。
提前致谢

编辑:添加滚动条类

public class myScroller extends Scroller {

private int mDuration = 400;

public myScroller(Context context) {
    super(context);
}

public myScroller(Context context, Interpolator interpolator) {
    super(context, interpolator);
}

public myScroller(Context context, Interpolator interpolator, boolean flywheel) {
    super(context, interpolator, flywheel);
}


@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
    // Ignore received duration, use fixed one instead
    super.startScroll(startX, startY, dx, dy, mDuration);
}

@Override
public void startScroll(int startX, int startY, int dx, int dy) {
    // Ignore received duration, use fixed one instead
    super.startScroll(startX, startY, dx, dy, mDuration);
}
}

最佳答案

终于我找到了问题,

这是我的旧代码的条件:
我有2页的列表视图。当我滑动它时,我再次在第二页上全部加载列表视图。

当我删除代码以加载所有列表视图时,页面之间的过渡会顺利进行。它似乎先加载列表视图,然后加载动画页面更改。

10-06 03:00