1. 程式人生 > >android 改變ViewPager切換頁面時的速度

android 改變ViewPager切換頁面時的速度

宣告:引自http://zhidao.baidu.com/link?url=9YCi4uGUki-xgV6d8_ZN5N1Jq9-eRw4efaiwvC6_aehw62IoskmrrS1ew1Cm11UmTO4UNMoaZEN6DI1HUedTLJA8Kt1-v0lWMCW_Jnd_wHy       點選開啟連結

原生的ViewPager頁面切換速度較快,但是又沒有方法設定切換速度,所以只能自定義一個滾動器,利用反射改變切換速度,程式碼如下:

import java.lang.reflect.Field;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.Interpolator;
import android.widget.Scroller;

/**
 * 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();
		}
	}
}

使用:

  ViewPagerScroller pagerScroller = new ViewPagerScroller(getActivity());
pagerScroller.setScrollDuration(1000);//設定時間,時間越長,速度越慢
pagerScroller.initViewPagerScroll(mViewPager);