转自:
http://my.oschina.net/javalover/blog/179003
ViewPager的setCurrentItem 滑动速度是写死地
public class FixedSpeedScroller extends Scroller { |
02 | private int mDuration = 1500 ; |
03 |
04 | public FixedSpeedScroller(Context context) { |
05 | super (context); |
06 | } |
07 |
08 | public FixedSpeedScroller(Context context, Interpolator interpolator) { |
09 | super (context, interpolator); |
10 | } |
11 |
12 | @Override |
13 | public void startScroll( int startX, int startY, int dx, int dy, int duration) { |
14 | // Ignore received duration, use fixed one instead |
15 | super .startScroll(startX, startY, dx, dy, mDuration); |
16 | } |
17 |
18 | @Override |
19 | public void startScroll( int startX, int startY, int dx, int dy) { |
20 | // Ignore received duration, use fixed one instead |
21 | super .startScroll(startX, startY, dx, dy, mDuration); |
22 | } |
23 |
24 | public void setmDuration( int time) { |
25 | mDuration = time; |
26 | } |
27 |
28 | public int getmDuration() { |
29 | return mDuration; |
30 | } |
31 | } |
使用方法:
01 | try { |
02 | Field field = ViewPager. class .getDeclaredField( "mScroller" ); |
03 | field.setAccessible( true ); |
04 | FixedSpeedScroller scroller = new FixedSpeedScroller(mViewPager.getContext(), |
05 | new AccelerateInterpolator()); |
06 | field.set(mViewPager, scroller); |
07 | scroller.setmDuration( 2000 ); |
08 | } catch (Exception e) { |
09 | LogUtils.e(TAG, "" , e); |
10 | } |
PagerAdapter 的 destroyItem 每次会删除上一个页面,导致,如果做自动切换页面时会看不到动画 .
解决办法:
destoryItem中不做删除view,instantiateItem中对view是否有parent做为判断条件,这种情况适用于,少量的固定的子View,比如一个Banner,banner中做自动循环播放