您的位置:首页 > 移动开发 > Android开发

Android之 修改ViewPager调用setCurrentItem时,滑屏的速度

2016-09-19 12:50 405 查看
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。看看没有设置之前和设置之后的效果吧:

设置之前:



设置之后:



对比两幅滑动效果,是不是设置之后的视觉效果更舒服呢!!具有阻尼效果,视觉更好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: