Android中ViewPager的api中,并没有对外暴露方法来设置ViewPager的滑动速度,通过查看源码发现,我们可以利用反射和自定义类的方式来控制viewPager的滑动速度,代码如下:
/**
* ViewPager 滚动速度设置
*
* @author lyy
*
*/
public class ViewPagerScroller extends Scroller {
private int mScrollDuration = 2000; // 滑动速度
/**
* 设置速度速度
*
* @param duration
*/
public void setScrollDuration(int duration) {
this.mScrollDuration = duration;
}
public ViewPagerScroller(Context context) {
super(context);
}
public ViewPagerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public ViewPagerScroller(Context context, Interpolator interpolator,
boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mScrollDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mScrollDuration);
}
public void initViewPagerScroll(ViewPager viewPager) {
try {
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
mScroller.set(viewPager, this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我们可以通过以下方式来控制ViewPager的滑动速度,上述代码的使用方法如下:
ViewPagerScroller pagerScroller = new ViewPagerScroller(getActivity());
pagerScroller.setScrollDuration(1000);//设置时间,时间越长,速度越慢
pagerScroller.initViewPagerScroll(mViewPager);
加入上述代码后,我们就可以控制ViewPager轮播图的滑动速度了。