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

前端之家收集整理的这篇文章主要介绍了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;
    }
}
}
原文链接:https://www.f2er.com/android/311002.html

猜你在找的Android相关文章