设置ViewPager的切换速度

文章目录

  1. 1. 自定义Scroller
  2. 2. 调用方法
  3. 3. 暴露的设置时间的方法

ViewPager的惯性效果(滑到一定距离自动平滑到另一个pager,或者调用setCurrentItem)是通过scroller来实现的, 其中有个变量为mScroller,为了修改这个滑动的速度,需要改变mScroller的一些值,但是mScroller是私有变量,所以在不直接修改ViewPager源码的情况下,只能用反射修改mScroller。

自定义Scroller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class ViewPagerScroller extends Scroller {
private int mDuration = 1000;//默认一个切换时间
public ViewPagerScroller(Context context) {
super(context);
}
public ViewPagerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void setmDuration(int time) {
mDuration = time;
}
public int getmDuration() {
return mDuration;
}
}

调用方法

1
2
3
4
5
6
7
8
try {
Field mField = ViewPager.class.getDeclaredField("mScroller");
mField.setAccessible(true);
mScroller = new ViewPagerScroller(viewPager.getContext(), new AccelerateInterpolator());
mField.set(viewPager, mScroller);
} catch (Exception e) {
e.printStackTrace();
}

暴露的设置时间的方法

1
2
viewPager.setCurrentItem(showPosition);
mScroller.setmDuration(3* 1000);//设置是3秒