我有一个ViewPager,我想要每5秒自动旋转,同时也允许用户刷.但是,当我设置自动更改时,页面之间的转换动画真的很快,我希望这个速度更慢.
我在这里看到这个问题的答案
Slowing speed of Viewpager controller in android
但他们都使用反思.有没有人知道任何减少ViewPager自动速度而不使用反射的方法?
我想到使用一个PageTransformer,但不知道是否可以工作,如果用户刷新以及自动的速度,它可能会影响速度?除非我能以某种方式检测出差异,然后再进行一个或者另一个PageTransformation?
解决方法
使用此自定义视图
public class ViewPagerCustomDuration extends ViewPager { private FixedSpeedScroller mScroller = null; public ViewPagerCustomDuration(Context context) { super(context); init(); } public ViewPagerCustomDuration(Context context,AttributeSet attrs) { super(context,attrs); init(); } /* * Override the Scroller instance with our own class so we can change the * duration */ private void init() { try { Class<?> viewpager = ViewPager.class; Field scroller = viewpager.getDeclaredField("mScroller"); scroller.setAccessible(true); mScroller = new FixedSpeedScroller(getContext(),new DecelerateInterpolator()); scroller.set(this,mScroller); } catch (Exception ignored) { } } /* * Set the factor by which the duration will change */ public void setScrollDuration(int duration) { mScroller.setScrollDuration(duration); } private class FixedSpeedScroller extends Scroller { private int mDuration = 500; public FixedSpeedScroller(Context context) { super(context); } public FixedSpeedScroller(Context context,Interpolator interpolator) { super(context,interpolator); } public FixedSpeedScroller(Context context,Interpolator interpolator,boolean flywheel) { super(context,interpolator,flywheel); } @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,mDuration); } @Override public void startScroll(int startX,int dy) { // Ignore received duration,mDuration); } public void setScrollDuration(int duration) { mDuration = duration; } } }