设置ViewPager的切换动画时间

当我们在直接使用viewPager.setCurrentItem(currentItem);时,ViewPager的切换使用时间是系统给定的,如果我们需要自己设置切换使用时长,系统在ViewPager类中是没有给出方法直接设置的,所以我们需要自己通过其他方法来进行设置。

1.创建一个类继承Scroller
package com.viewpager.test;  
  
import android.content.Context;  
import android.view.animation.Interpolator;  
import android.widget.Scroller;  
  
public class FixedSpeedScroller extends Scroller {  
    private int mDuration = 1000;  
    public FixedSpeedScroller(Context context) {  
        super(context);  
        // TODO Auto-generated constructor stub  
    }  
  
    public FixedSpeedScroller(Context context, Interpolator interpolator) {  
        super(context, interpolator);  
    }  
  
    @Override  
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {  
        // Ignore received duration, use fixed one instead  
        super.startScroll(startX, startY, dx, dy, mDuration);  
    }  
  
    @Override  
    public void startScroll(int startX, int startY, int dx, int dy) {  
        // Ignore received duration, use fixed one instead  
        super.startScroll(startX, startY, dx, dy, mDuration);  
    }  
  
    /** 
     * 设置切换时间 
     */  
    public void setmDuration(int time) {  
        mDuration = time;  
    }  
  
    /** 
     * 获取切换时间 
     */  
    public int getmDuration() {  
        return mDuration;  
    }  
}


2.在使用ViewPager的Activity中找到ViewPager控件,然后通过反射得到ViewPager的mScroller字段得到Field对象,然后通过Field的set(Object object,Object value)方法设置自己的FixedSpeedScroller对象为新的值。

viewPager = (ViewPager) findViewById(R.id.vp);  
  
// 设置ViewPager的Adapter  
adapter = new MyPagerAdapter();  
viewPager.setAdapter(adapter);  
try {  
    // 通过class文件获取mScroller属性  
    Field mField = ViewPager.class.getDeclaredField("mScroller");  
    mField.setAccessible(true);  
    mScroller = new FixedSpeedScroller(viewPager.getContext(),new AccelerateInterpolator());  
    mField.set(viewPager, mScroller);  
} catch (Exception e) {  
    e.printStackTrace();  
}


3.最后在ViewPager切换时,通过FixedSpeedScroller对象设置时间就可以了。

viewPager.setCurrentItem(currentItem);  
mScroller.setmDuration(2 * 1000);// 切换时间,毫秒值


这样我们就改变了ViewPager的切换时间了。


你可能感兴趣的:(Android,知识)