当我们在直接使用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中更改ViewPager的切换动画时间。由于系统默认未提供直接设置方法,我们可以通过创建FixedSpeedScroller对象并在切换时设置时间来实现这一功能。

1645

被折叠的 条评论
为什么被折叠?



