大家可以看看,使用viewpager的时候大家不要忘了导入android-support-v4.jar这个包,自己可以去下载。 但是在使用的时候发现以上找到的viewpager不能实现循环滑动,这对于用户体验可能不是太好,所以自己又开始在此基础上寻找其他的方法,最终发现了以下解决办法: 将MyPagerAdapter修改一下:
这样一来,其他地方不需要修改,即可实现viewpager的循环滑动效果
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/**
* ViewPager适配器
*/
public
class
MyPagerAdapter
extends
PagerAdapter {
public
List<View> views;
Context context;
int
mCount;
public
MyPagerAdapter(Context context,List<View> views) {
this
.views = views;
this
.context=context;
mCount = views.size();
}
@Override
public
void
destroyItem(View collection,
int
position, Object arg2) {
if
(position >= views.size()) {
int
newPosition = position%views.size();
position = newPosition;
// ((ViewPager) collection).removeView(views.get(position));
}
if
(position <
0
){
position = -position;
// ((ViewPager) collection).removeView(views.get(position));
}
}
@Override
public
void
finishUpdate(View arg0) {
}
@Override
public
int
getCount() {
return
mCount+
1
;
//此处+1才能向右连续滚动
}
@Override
public
Object instantiateItem(View collection,
int
position) {
if
(position >= views.size()) {
int
newPosition = position%views.size();
position = newPosition;
mCount++;
}
if
(position <
0
){
position = -position;
mCount--;
}
try
{
((ViewPager) collection).addView(views.get(position),
0
);
}
catch
(Exception e) {
}
return
views.get(position);
}
@Override
public
boolean
isViewFromObject(View view, Object object) {
return
view == (object);
}
@Override
public
void
restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public
Parcelable saveState() {
return
null
;
}
@Override
public
void
startUpdate(View arg0) {
}
}
同时如果你要的效果里面有上面链接中的那个白色的动画效果,同样也需要再修改一个地方
/**
* 页卡切换监听,用于改变动画位置
*/
public
class
MyOnPageChangeListener
implements
OnPageChangeListener {
int
one = offset *
2
+ bmpW;
// 页卡1 -> 页卡2 偏移量
int
two = one *
2
;
// 页卡1 -> 页卡3 偏移量
@Override
public
void
onPageSelected(
int
arg0) {
Animation animation =
null
;
if
(arg0>
2
){
arg0=arg0%
3
;
}
switch
(arg0) {
case
0
:
if
(currIndex ==
1
) {
animation =
new
TranslateAnimation(one,
0
,
0
,
0
);
}
else
if
(currIndex ==
2
) {
animation =
new
TranslateAnimation(two,
0
,
0
,
0
);
}
break
;
case
1
:
if
(currIndex ==
0
) {
animation =
new
TranslateAnimation(offset, one,
0
,
0
);
}
else
if
(currIndex ==
2
) {
animation =
new
TranslateAnimation(two, one,
0
,
0
);
}
break
;
case
2
:
if
(currIndex ==
0
) {
animation =
new
TranslateAnimation(offset, two,
0
,
0
);
}
else
if
(currIndex ==
1
) {
animation =
new
TranslateAnimation(one, two,
0
,
0
);
}
break
;
}
currIndex = arg0;
animation.setFillAfter(
true
);
// True:图片停在动画结束位置
animation.setDuration(
300
);
cursor.startAnimation(animation);
}
@Override
public
void
onPageScrolled(
int
arg0,
float
arg1,
int
arg2) {
}
@Override
public
void
onPageScrollStateChanged(
int
arg0) {
}
}
|
自己继续修改了以下,发现可以实现向左无限循环(貌似是无限)的,我的方法如下 有几个方法做以下改动就行了
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Override
public
void
destroyItem(View collection,
int
position, Object arg2) {
//循环滑动时此处不能销毁
// ((ViewPager) collection).removeView(views.get(position%views.size()));
}
@Override
public
void
finishUpdate(View arg0) {
}
@Override
public
int
getCount() {
return
Integer.MAX_VALUE;
//设置成最大值以便循环滑动
}
@Override
public
Object instantiateItem(View collection,
int
position) {
try
{
((ViewPager) collection).addView(views.get(position%views.size()),
0
);
}
catch
(Exception e) {
}
return
views.get(position%views.size());
}
|
最后再初始化页面时mPager.setCurrentItem(3*100);//设置初始页面,为0的话开始不能向左滑动
这样的话就能实现类似的无限循环(向左其实只有100次,只是一般没人会在那儿向左移动那么多次而已)
http://www.2cto.com/kf/201311/256446.html
本文详细介绍了在Android应用中使用ViewPager组件时遇到的循环滑动问题,并提供了解决方案。通过修改适配器(MyPagerAdapter)中的关键方法,实现了ViewPager的循环滑动效果。此外,还展示了如何使滑动效果无限循环,即向左无限滑动。通过调整适配器的`getCount()`方法和`instantiateItem()`方法,使得滑动效果不仅在向右滑动时循环,还能在特定情况下实现向左无限循环。同时,文章还分享了一个包含白色动画效果的页卡切换监听类(MyOnPageChangeListener),进一步丰富了用户体验。
185

被折叠的 条评论
为什么被折叠?



