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) {
// Ignore received duration, use fixed one instead
super
.startScroll(startX, startY, dx, dy, mDuration);
}
@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, mDuration);
}
public
void
setmDuration(
int
time) {
mDuration = time;
}
public
int
getmDuration() {
return
mDuration;
}
}
|
使用方法:
1
2
3
4
5
6
7
8
9
10
|
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中做自动循环播放