package com.example.widget;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;
// source: http://stackoverflow.com/questions/8155257/slowing-speed-of-viewpager-controller-in-android/
public class FixedScroller extends Scroller
{
private int mFixedDuration = 100;
public FixedScroller(Context context)
{
super(context);
}
public FixedScroller(Context context, Interpolator interpolator)
{
super(context, interpolator);
}
public FixedScroller(Context context, Interpolator interpolator, boolean flywheel)
{
super(context, interpolator, flywheel);
}
public static void setViewPagerDuration(ViewPager viewPager, int duration)
{
try
{
Field field = ViewPager.class.getDeclaredField("mScroller");
field.setAccessible(true);
FixedScroller fixedScroller = new FixedScroller(viewPager.getContext(), new DecelerateInterpolator());
fixedScroller.setFixedDuration(duration);
field.set(viewPager, fixedScroller);
}
catch(NoSuchFieldException e)
{
}
catch(IllegalArgumentException e)
{
}
catch(IllegalAccessException e)
{
}
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration)
{
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mFixedDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy)
{
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mFixedDuration);
}
public int getFixedDuration()
{
return mFixedDuration;
}
public void setFixedDuration(int duration)
{
mFixedDuration = duration;
}
}