修改ViewPager setCurrentItem 動畫時間

ViewPager中使用setCurrentItem切換Item時的動畫時間是固定死的,所以需要用反射來實現(xiàn)修改

第一步:自定義Scroller

創(chuàng)建一個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) {
        //此處必須重寫,網(wǎng)上有些資料里只重寫了上面那個,不知道他們的是怎么工作的,我實際測試時行不通的。
        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);
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,027評論 25 709
  • 用了一段時間的 Vue,基本熟悉了討論,看到 Vue2.0 已經(jīng)發(fā)布,而且文檔已經(jīng)比較齊全,剛好學習和遷移一下 V...
    馬文Marvin閱讀 1,674評論 1 1
  • 顏值毀畫呀。。。唉 草稿很好看,結果上了色就。。。 唉,寫小說去了! 心痛啊?。。”鞠膳o靜的寫書了。www
    藍鈴丶依閱讀 236評論 0 1
  • 忽然想起大學畢業(yè)那年,仍未從失戀的痛苦中走出,除了對他滿滿地怨恨,就是確信自己未來很強大的蜜汁自信。那年我發(fā)誓,自...
    劉大楊閱讀 235評論 0 0
  • 為什么重新拿起了《人性的弱點》? 二十年前的自己:自信、樂觀、無憂無慮; 反觀今天的自己:無趣、焦慮、郁郁寡歡、喜...
    小揚輕輕閱讀 1,406評論 0 1

友情鏈接更多精彩內(nèi)容