Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 增加viewpager smoothscroll持续时间大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Change ViewPager animation duration when sliding programmatically5个
我正在使用ViewPager子类MyPager(几乎相同),并且我使用其setCurrentItem(int index,Boolean smooth)方法,并将smooth参数设置为true.它实际上比参数设置为’false’更平滑,但我想增加动画持续时间以使转换更加明显.

我从不同的帖子收集了一些信息,this solution看起来很完美.我最终得到了这段代码“@H_618_4@ @H_915_3@myPager.java:@H_618_4@

public class MyPager extends ViewPager {
    public MyPager(Context context,AttributeSet attrs) {
        super(context,attrs);
        this.enabled = true;
        posTinitViewPager();
    }

    private ScrollerCustomDuration mScroller = null;

    /**
     * Override the Scroller instance with our own class so we can change the
     * duration
     */
    private void posTinitViewPager() {
        try {
             Class<?> viewpager = ViewPager.class;
                Field scroller = viewpager.getDeclaredField("mScroller");
                scroller.setAccessible(true);
                Field interpolator = viewpager.getDeclaredField("sInterpolator");
                interpolator.setAccessible(true);

                mScroller = new ScrollerCustomDuration(getContext(),(Interpolator) interpolator.get(null));
                scroller.set(this,mScroller);
        } catch (Exception E) {
            Log.e("MyPager",e.getmessage());
        }
    }

    /**
     * Set the factor by which the duration will change
     */
    public void setScrollDurationFactor(double scrollFactor) {
        mScroller.setScrollDurationFactor(scrollFactor);
    }
}

ScrollerCustomDuration.java@H_618_4@

public class ScrollerCustomDuration extends Scroller {
    private double mScrollFactor = 2;

    public ScrollerCustomDuration(Context context) {
        super(context);
    }

    public ScrollerCustomDuration(Context context,Interpolator interpolator) {
        super(context,interpolator);
    }

    public ScrollerCustomDuration(Context context,Interpolator interpolator,Boolean flywheel) {
        super(context,interpolator,flywheel);
    }

    /**
     * Set the factor by which the duration will change
     */
    public void setScrollDurationFactor(double scrollFactor) {
        mScrollFactor = scrollFactor;
    }

    @Override
    public void startScroll(int startX,int startY,int dx,int dy,int duration) {
        super.startScroll(startX,startY,dx,dy,(int) (duration * mScrollFactor));
    }

}

问题是,当通过行scrolller.set(this,mScroller)运行时,我无法摆脱这个异常; MyPager:@H_618_4@

java.lang.IllegalArgumentexception: invalid value for field

任何的想法?@H_618_4@

解决方法

你能修改这部分代码并插入一个Log语句吗?
private void posTinitViewPager() {
    try {
         Class<?> viewpager = ViewPager.class;
            Field scroller = viewpager.getDeclaredField("mScroller");
            scroller.setAccessible(true);
            Field interpolator = viewpager.getDeclaredField("sInterpolator");
            interpolator.setAccessible(true);

            mScroller = new ScrollerCustomDuration(getContext(),(Interpolator) interpolator.get(null));
            Log.d("TAG","mScroller is: " + mScroller + ","
                + mScroller.getClass().getSuperclass().getCanonicalName() + "; this class is "
                + this + "," + getClass().getSuperclass().getCanonicalName());
            scroller.set(this,mScroller);
    } catch (Exception E) {
        Log.e("MyPager",e.getmessage());
    }

然后发布输出?@H_618_4@

编辑:问题是导入语句不正确. mScroller是一个android.widget.Scroller,你不能给它分配一个com.WazaBe.HoloEverywhere.widget.Scroller.@H_618_4@

大佬总结

以上是大佬教程为你收集整理的android – 增加viewpager smoothscroll持续时间全部内容,希望文章能够帮你解决android – 增加viewpager smoothscroll持续时间所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。