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

  最后看下效果图:

posted @   Fly_Elephant  阅读(1391)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示