您的位置:首页 > 其它

设置ViewPager的切换动画时间

2016-12-09 22:01 351 查看
当我们在直接使用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的切换时间了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: