修改ViewPager调用setCurrentItem时,滑屏的速度

原文摘自: 修改ViewPager调用setCurrentItem时,滑屏的速度

在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个方法的时候有个问题,跳转的时候有滑动效果,当需要从当前页面跳转到其它页面时,跳转页面跨度过大、或者ViewPager每个页面的视觉效果相差较大时,通过这种方式实现ViewPager跳转显得很不美观,怎么办呢,我们可以去掉在使用ViewPager的setCurrentItem方法时的滑屏速度,具体实现如下:

一、自定义一个Scroll类,用于控制ViewPager滑动速度:

 

[java] view plaincopy
 
  1. <span style="font-size:18px">import android.content.Context;  
  2. import android.view.animation.Interpolator;  
  3. import android.widget.Scroller;  
  4.   
  5. public class FixedSpeedScroller extends Scroller {  
  6.     private int mDuration = 0;  
  7.   
  8.     public FixedSpeedScroller(Context context) {  
  9.         super(context);  
  10.     }  
  11.   
  12.     public FixedSpeedScroller(Context context, Interpolator interpolator) {  
  13.         super(context, interpolator);  
  14.     }  
  15.   
  16.     public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {  
  17.         super(context, interpolator, flywheel);  
  18.     }  
  19.   
  20.   
  21.     @Override  
  22.     public void startScroll(int startX, int startY, int dx, int dy, int duration) {  
  23.         super.startScroll(startX, startY, dx, dy, mDuration);  
  24.     }  
  25.   
  26.     @Override  
  27.     public void startScroll(int startX, int startY, int dx, int dy) {  
  28.         super.startScroll(startX, startY, dx, dy, mDuration);  
  29.     }  
  30. }</span>  


二、在初始化ViewPager时,对ViewPager作如下设置:

 

 

[java] view plaincopy
 
  1. <span style="font-size:18px">/** 
  2.      * 设置ViewPager的滑动速度 
  3.      *  
  4.      * */  
  5.     private void setViewPagerScrollSpeed( ){  
  6.         try {  
  7.             Field mScroller = null;  
  8.             mScroller = ViewPager.class.getDeclaredField("mScroller");  
  9.             mScroller.setAccessible(true);   
  10.             FixedSpeedScroller scroller = new FixedSpeedScroller( mViewPager.getContext( ) );  
  11.             mScroller.set( mViewPager, scroller);  
  12.         }catch(NoSuchFieldException e){  
  13.               
  14.         }catch (IllegalArgumentException e){  
  15.               
  16.         }catch (IllegalAccessException e){  
  17.               
  18.         }  
  19.     }</span>  


运行代码后你就发现,它是直接跳转,没有滑屏效果了。

posted @ 2014-02-08 15:59  杨斌_济南  阅读(17261)  评论(4编辑  收藏  举报