Android循环ViewPager(二)

上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的View,看到网上还有一种就是在自定义的Adapter中getCount中返回最大值,然后destroyItem不删除View,添加异常,说了这么多,我实验之后总是有问题,如果有弄成功的可以告知我一下,我的是三张图片~还是按照上午的那种方式就是第一个和最后一个是空View:

基础布局

看下效果吧,加了一排小圈圈,比上午的那个Demo好看:

Android循环ViewPager(二)

 

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(1010));
    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
 
            }
        });

  最后看下效果图:

Android循环ViewPager(二)

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4150091.html,如需转载请自行联系原作者