Android之 修改ViewPager調用setCurrentItem時,滑屏的速度

1。前言:

在使用ViewPager的過程中,有需要直接跳轉到某一個頁面的情況,這個時候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳轉到ViewPager的指定頁面,但在使用這個方法的時候有個問題,跳轉的時候有滑動效果,當需要從當前頁面跳轉到其它頁面時,跳轉頁面跨度過大、或者ViewPager每個頁面的視覺效果相差較大時,通過這種方式實現ViewPager跳轉顯得很不美觀,怎麼辦呢,我們可以去掉在使用ViewPager的setCurrentItem方法時的滑屏速度,具體實現如下:

import java.lang.reflect.Field;

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

public class ViewPagerScroller extends Scroller{

    private int mScrollDuration = 800; // 滑動速度

    /**
    * 設置速度速度
    *
    * @param duration
    */
    public void setScrollDuration(int duration) {
    this.mScrollDuration = duration;
    }

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

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

    @SuppressLint("NewApi")
    public ViewPagerScroller(Context context, Interpolator interpolator,
    boolean flywheel) {
    super(context, interpolator, flywheel);
    }

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

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

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

}

2使用:

    viewPager.setCurrentItem(showPosition);
        ViewPagerScroller mPagerScroller=new ViewPagerScroller(getActivity());
        mPagerScroller.initViewPagerScroll(viewPager);

3。看看沒有設置之前和設置之後的效果吧:

設置之前:
這裏寫圖片描述

設置之後:

這裏寫圖片描述

對比兩幅滑動效果,是不是設置之後的視覺效果更舒服呢!!具有阻尼效果,視覺更好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章