android – 改变ViewPager和setCurrentItem的转换速度

我有一个ViewPager,我想要每5秒自动旋转,同时也允许用户刷.但是,当我设置自动更改时,页面间的转换动画真的很快,我希望这个速度更慢.

在这里看到这个问题的答案

Slowing speed of Viewpager controller in android

但他们都使用反思.有没有人知道任何减少ViewPager自动速度而不使用反射的方法

我想到使用一个PageTransformer,但不知道是否可以工作,如果用户刷新以及自动的速度,它可能会影响速度?除非我能以某种方式检测出差异,然后再进行一个或者另一个PageTransformation?

解决方法

使用此自定义视图
public class ViewPagerCustomDuration extends ViewPager {
private FixedSpeedScroller mScroller = null;

public ViewPagerCustomDuration(Context context) {
    super(context);
    init();
}

public ViewPagerCustomDuration(Context context,AttributeSet attrs) {
    super(context,attrs);
    init();
}

/*
 * Override the Scroller instance with our own class so we can change the
 * duration
 */
private void init() {
    try {
        Class<?> viewpager = ViewPager.class;
        Field scroller = viewpager.getDeclaredField("mScroller");
        scroller.setAccessible(true);
        mScroller = new FixedSpeedScroller(getContext(),new DecelerateInterpolator());
        scroller.set(this,mScroller);
    } catch (Exception ignored) {
    }
}

/*
 * Set the factor by which the duration will change
 */
public void setScrollDuration(int duration) {
    mScroller.setScrollDuration(duration);
}

private class FixedSpeedScroller extends Scroller {

    private int mDuration = 500;

    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) {
        // Ignore received duration,use fixed one instead
        super.startScroll(startX,startY,dx,dy,mDuration);
    }

    @Override
    public void startScroll(int startX,int dy) {
        // Ignore received duration,mDuration);
    }

    public void setScrollDuration(int duration) {
        mDuration = duration;
    }
}
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...