原文摘自: 修改ViewPager調用setCurrentItem時,滑屏的速度
在使用ViewPager的過程中,有需要直接跳轉到某一個頁面的情況,這個時候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳轉到ViewPager的指定頁面,但在使用這個方法的時候有個問題,跳轉的時候有滑動效果,當需要從當前頁面跳轉到其它頁面時,跳轉頁面跨度過大、或者ViewPager每個頁面的視覺效果相差較大時,通過這種方式實現ViewPager跳轉顯得很不美觀,怎么辦呢,我們可以去掉在使用ViewPager的setCurrentItem方法時的滑屏速度,具體實現如下:
一、自定義一個Scroll類,用於控制ViewPager滑動速度:
- <span style="font-size:18px">import android.content.Context;
- import android.view.animation.Interpolator;
- import android.widget.Scroller;
- public class FixedSpeedScroller extends Scroller {
- private int mDuration = 0;
- 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, 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);
- }
- }</span>
二、在初始化ViewPager時,對ViewPager作如下設置:
- <span style="font-size:18px">/**
- * 設置ViewPager的滑動速度
- *
- * */
- private void setViewPagerScrollSpeed( ){
- try {
- Field mScroller = null;
- mScroller = ViewPager.class.getDeclaredField("mScroller");
- mScroller.setAccessible(true);
- FixedSpeedScroller scroller = new FixedSpeedScroller( mViewPager.getContext( ) );
- mScroller.set( mViewPager, scroller);
- }catch(NoSuchFieldException e){
- }catch (IllegalArgumentException e){
- }catch (IllegalAccessException e){
- }
- }</span>
運行代碼后你就發現,它是直接跳轉,沒有滑屏效果了。
