平滑滚动在ViewPager(支持库)中不起作用

Tau*_*das 10 android scroll android-viewpager

我正在编写ViewPager用于托管Fragments的应用程序.

当我以编程方式更改片段时,平滑滚动功能不起作用.我使用ViewPager.setCurrentItem(int item,boolean smoothScroll)`方法.

也许有人知道解决这个bug的方法吗?也许有动画?

编辑:我正在使用支持包.问题在于我是否使用ViewPager.setCurrentItem(2, true)ViewPager.setCurrentItem(2, false)结果是一样的.视图切换非常快(不顺畅).

Mar*_*ele 17

我通过创建一个使用反射覆盖ViewPager.mScroller的MyViewPager来解决这个问题.

public class MyViewPager extends ViewPager 
{
  public MyViewPager( Context context, AttributeSet attrs) 
  {
    super( context, attrs );
    setMyScroller();
  }
  private void setMyScroller() 
  {
    try 
    {
            Class<?> viewpager = ViewPager.class;
            Field scroller = viewpager.getDeclaredField("mScroller");
            scroller.setAccessible(true);
            scroller.set(this, new MyScroller(getContext()));
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
  }

  public class MyScroller extends Scroller 
  {
    public MyScroller(Context context) 
    {
        super(context, new DecelerateInterpolator());
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) 
    {
        super.startScroll(startX, startY, dx, dy, 1000 /*1 secs*/);
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用此变通方法和ProGuard,则需要将其添加到ProGuard配置中:`-keepclassmembers class android.support.v4.view.ViewPager {private android.widget.Scroller mScroller; }` (6认同)