由于Viewpager的滚动速度是固定的,且没有提供接口修改。我们只能利用反射的方法给ViewPager对象的属性scroller进行设置,改成自定义的scroller。
反射设置viewpager的scroller代码如下:
try {
FieldmScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
MyViewPagerScroller myScroller = new MyViewPagerScroller(
mViewPager.getContext());
mscroller.setScrollDuration(1500);
mScroller.set(mViewPager, myScroller);
} catch (Exception e) {
e.printStackTrace();
}
自定义的
/**
* 给viewpager用的自定义的Scroller对像,主要用于控制自动滚动的速度
* @author 小红
*
*/
public class MyViewPagerScroller extends Scroller {
private int mDuration = 1200;//默认移动速度
public MyViewPagerScroller(Context context) {
super(context);
}
public MyViewPagerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
//设置滚动速度
public void setScrollDuration(int duration){
mDuration = duration;
}
@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);
}
}