上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的View,看到网上还有一种就是在自定义的Adapter中getCount中返回最大值,然后destroyItem不删除View,添加异常,说了这么多,我实验之后总是有问题,如果有弄成功的可以告知我一下,我的是三张图片~还是按照上午的那种方式就是第一个和最后一个是空View:
基础布局
看下效果吧,加了一排小圈圈,比上午的那个Demo好看:
activity_pager.xml:
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
|
<FrameLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
android:orientation=
"vertical"
>
<android.support.v4.view.ViewPager
android:id=
"@+id/viewPager_pic"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
/>
<RelativeLayout
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<LinearLayout
android:id=
"@+id/viewGroup_pic"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_marginBottom=
"30dp"
android:gravity=
"center_horizontal"
android:orientation=
"horizontal"
>
</LinearLayout>
</RelativeLayout>
</FrameLayout>
|
实现Demo
自定义一个MyPicViewPagerAdapter:
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
|
private
class
MyPicViewPagerAdapter
extends
PagerAdapter {
@Override
public
int
getCount() {
// TODO Auto-generated method stub
return
viewList.size();
}
@Override
public
boolean
isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return
arg0 == arg1;
}
@Override
public
void
destroyItem(ViewGroup container,
int
position, Object object) {
// TODO Auto-generated method stub
container.removeView(viewList.get(position));
}
@Override
public
Object instantiateItem(ViewGroup container,
int
position) {
// TODO Auto-generated method stub
container.addView(viewList.get(position),
0
);
return
viewList.get(position);
}
}
|
activity中的字段:
1
2
3
4
5
6
|
private
ViewPager viewPager;
private
int
[] srcArr =
new
int
[] { R.drawable.eagle, R.drawable.heron,
R.drawable.flamingo };
private
ViewGroup viewGroup;
private
List<View> viewList;
private
ImageView[] cycleList;
|
activity中的onCreate中实例化的ViewPager和ViewGroup,实例化的时候加入参数
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
|
viewPager = (ViewPager) findViewById(R.id.viewPager_pic);
viewGroup = (ViewGroup) findViewById(R.id.viewGroup_pic);
viewList =
new
ArrayList<View>();
viewList.add(
new
View(
this
));
for
(
int
i =
0
; i < srcArr.length; i++) {
ImageView imageView =
new
ImageView(
this
);
imageView.setBackgroundResource(srcArr[i]);
viewList.add(imageView);
}
viewList.add(
new
View(
this
));
// 加载小圆圈
cycleList =
new
ImageView[srcArr.length];
for
(
int
i =
0
; i < cycleList.length; i++) {
ImageView imageView =
new
ImageView(
this
);
imageView.setLayoutParams(
new
LayoutParams(
10
,
10
));
cycleList[i] = imageView;<br>
//0的时候选中
if
(i ==
0
) {
cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
}
else
{
cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
}
LinearLayout.LayoutParams layoutParams =
new
LinearLayout.LayoutParams(
new
ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
layoutParams.leftMargin =
5
;
layoutParams.rightMargin =
5
;
viewGroup.addView(imageView, layoutParams);
}
viewPager.setAdapter(
new
MyPicViewPagerAdapter());
viewPager.setCurrentItem(
1
);
|
Demo重要的是循环,由于是有五个View,三个小圈圈,所以就需要改变一下选中的setOnPageChangeListener:
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
|
viewPager.setOnPageChangeListener(
new
OnPageChangeListener() {
@Override
public
void
onPageSelected(
int
arg0) {
// TODO Auto-generated method stub
for
(
int
i =
0
; i < cycleList.length; i++) {
cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
if
(i == arg0-
1
) {
cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
}
}
if
(arg0 ==
0
)
viewPager.setCurrentItem(viewList.size()-
2
);
else
if
(arg0 == viewList.size() -
1
)
viewPager.setCurrentItem(
1
);
}
@Override
public
void
onPageScrolled(
int
arg0,
float
arg1,
int
arg2) {
// TODO Auto-generated method stub
}
@Override
public
void
onPageScrollStateChanged(
int
arg0) {
// TODO Auto-generated method stub
}
});
|
最后看下效果图:
本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4150091.html,如需转载请自行联系原作者