ViewPager的setCurrentItem 滑动速度是写死地,下面的方法可以修改,在此以做记录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class FixedSpeedScroller extends Scroller { private int mDuration = 1500; public FixedSpeedScroller(Context context) { super(context); } public FixedSpeedScroller(Context context, Interpolator interpolator) { super(context, interpolator); } @Override public void startScroll(int startX, int startY, int dx, int dy, int duration) { super.startScroll(startX, startY, dx, dy, mDuration); } @Override public void startScroll(int startX, int startY, int dx, int dy) { super.startScroll(startX, startY, dx, dy, mDuration); } public void setmDuration(int time) { mDuration = time; } public int getmDuration() { return mDuration; } }
|
使用方法:
1 2 3 4 5 6 7 8 9 10 11
| import java.lang.reflect.Field;
try { Field field = ViewPager.class.getDeclaredField("mScroller"); field.setAccessible(true); FixedSpeedScroller scroller = new FixedSpeedScroller(mViewPager.getContext(),new AccelerateInterpolator()); field.set(mViewPager, scroller); scroller.setmDuration(2000); } catch (Exception e) { LogUtils.e(TAG, "", e); }
|
注意点:
PagerAdapter 的 destroyItem 每次会删除上一个页面,导致,如果做自动切换页面时会看不到动画。
解决办法:
destoryItem中不做删除view,instantiateItem中对view是否有parent做为判断条件,这种情况适用于,少量的固定的子View,比如一个Banner,banner中做自动循环播放 。
在初始化ViewPager时,对ViewPager作如下设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
private void setViewPagerScrollSpeed( ){ try { Field mScroller = null; mScroller = ViewPager.class.getDeclaredField("mScroller"); mScroller.setAccessible(true); FixedSpeedScroller scroller = new FixedSpeedScroller( mViewPager.getContext( ) ); mScroller.set( mViewPager, scroller); }catch(NoSuchFieldException e){ }catch (IllegalArgumentException e){ }catch (IllegalAccessException e){ } }
|
运行代码后你就发现,它是直接跳转,没有滑屏效果了。