问题背景
在使用ViewPager
的过程中,有需要直接跳转到某一个页面的情况,这个时候需要使用ViewPager
的setCurrentItem
方法,它的作用是跳转到ViewPager
的指定页面。但是在使用这个方法的时候有这样一个问题,页面在跳转的时候有滑动效果,当需要从当前页面跳转到其它页面时,如果跳转的页面跨度过大或者ViewPager
的每个页面视觉效果相差较大时,通过这种方式实现ViewPager
的跳转显得很不美观。
解决办法
去掉在使用ViewPager
的setCurrentItem
方法时的滑屏速度。
具体实现如下:
public class FixedSpeedScroller extends Scroller {
private int mDuration = 0;//滑屏速度
/**
* 设置滑屏速度
*
* @param mDuration 速度
*/
public void setmDuration(int mDuration) {
this.mDuration = mDuration;
}
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
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.setCurrentItem(showPosition);
FixedSpeedScroller mScroller = new FixedSpeedScroller(mActivity);
mScroller.initViewPagerScroll(viewPager);