1。前言:
在使用ViewPager的過程中,有需要直接跳轉到某一個頁面的情況,這個時候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳轉到ViewPager的指定頁面,但在使用這個方法的時候有個問題,跳轉的時候有滑動效果,當需要從當前頁面跳轉到其它頁面時,跳轉頁面跨度過大、或者ViewPager每個頁面的視覺效果相差較大時,通過這種方式實現ViewPager跳轉顯得很不美觀,怎麼辦呢,我們可以去掉在使用ViewPager的setCurrentItem方法時的滑屏速度,具體實現如下:
import java.lang.reflect.Field;
import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.Interpolator;
import android.widget.Scroller;
public class ViewPagerScroller extends Scroller{
private int mScrollDuration = 800; // 滑動速度
/**
* 設置速度速度
*
* @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);
}
@SuppressLint("NewApi")
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();
}
}
}
2使用:
viewPager.setCurrentItem(showPosition);
ViewPagerScroller mPagerScroller=new ViewPagerScroller(getActivity());
mPagerScroller.initViewPagerScroll(viewPager);
3。看看沒有設置之前和設置之後的效果吧:
設置之前:
設置之後:
對比兩幅滑動效果,是不是設置之後的視覺效果更舒服呢!!具有阻尼效果,視覺更好