在viewpager中2页之间的过渡不能顺利进行

时间:2015-07-24 09:06:49

标签: android android-viewpager

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

如果符合以下情况,动画工作非常顺利:

  1. 我点击操作栏标签更改页面
  2. 如果我的手指缓慢向左或向右移动以更改页面
  3. 如果我的手指移动缓慢,请将手指从屏幕上移开(返回上一屏幕)
  4. 但问题是当我快速滑动手指时,上一页和下一页之间的过渡会有一些冻结时刻,尽管它只是在1秒以内。

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

    mainactivity:

    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 个答案:

答案 0 :(得分:1)

最后我发现了问题,

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

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

答案 1 :(得分:0)