Android循环ViewPager(二)
上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的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,如需转载请自行联系原作者