修改ViewPager setCurrentItem 动画时间

ViewPager中使用setCurrentItem切换Item时的动画时间是固定死的,所以需要用反射来实现修改

第一步:自定义Scroller

创建一个ViewPagerScroller类,继承自android.widget.Scroller

package cn.com.yamaha.touch.widget;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.Interpolator;
import android.widget.Scroller;

import java.lang.reflect.Field;

/**
 * Project:YamahaTouch
 * 2017/3/28 2:06
 * Author:Dillon
 * E-Mail:ding.zugeng@outlook.com
 */

public class ViewPagerScroller extends Scroller {
    private int mDuration = 2000;/*default duration time*/

    /**
     * Set custom duration time.
     * @param duration duration
     */
    public void setScrollDuration(int duration){
        mDuration = duration;
    }

    /**
     * Get duration time.
     * @return duration
     */
    public int getmDuration() {
        return mDuration;
    }

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

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

    public ViewPagerScroller(Context context, Interpolator interpolator, boolean flywheel) {
        super(context, interpolator, flywheel);
    }

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

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        //此处必须重写,网上有些资料里只重写了上面那个,不知道他们的是怎么工作的,我实际测试时行不通的。
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    public void initViewPagerScroll(ViewPager pager){
        try{
            Field field = ViewPager.class.getDeclaredField("mScroller");
            field.setAccessible(true);
            field.set(pager,this);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

第二步:使用

        ViewPagerScroller scroller = new ViewPagerScroller(getActivity());
        scroller.setScrollDuration(3000);//时间越长,速度越慢。
        scroller.initViewPagerScroll(mPager);
        mPager.setAdapter(adapter);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,219评论 25 708
  • 用了一段时间的 Vue,基本熟悉了讨论,看到 Vue2.0 已经发布,而且文档已经比较齐全,刚好学习和迁移一下 V...
    马文Marvin阅读 1,675评论 1 1
  • 颜值毁画呀。。。唉 草稿很好看,结果上了色就。。。 唉,写小说去了! 心痛啊!!!本仙女要静静的写书了。www
    蓝铃丶依阅读 236评论 0 1
  • 忽然想起大学毕业那年,仍未从失恋的痛苦中走出,除了对他满满地怨恨,就是确信自己未来很强大的蜜汁自信。那年我发誓,自...
    刘大杨阅读 236评论 0 0
  • 为什么重新拿起了《人性的弱点》? 二十年前的自己:自信、乐观、无忧无虑; 反观今天的自己:无趣、焦虑、郁郁寡欢、喜...
    小扬轻轻阅读 1,409评论 0 1

友情链接更多精彩内容