上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的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(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
            }
        });

  最后看下效果图:

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

Android循环ViewPager(二)相关推荐

  1. android双重for循环,Android实现ViewPager无限循环效果(二)

    本文实例为大家分享了Android实现ViewPager无限循环效果的第二种方式,供大家参考,具体内容如下 原理:在Adapter中将getCount设置为无限大 package com.xiaoma ...

  2. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  3. 微信小程序手把手教你实现类似Android中ViewPager控件效果

    微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...

  4. 视频教程-Android之ViewPager,Fragment知识全讲-Android

    Android之ViewPager,Fragment知识全讲 刘志远,北京邮电大学硕士研究生, 北京育华志远科技有限公司创始人, 育华志远教育品牌负责人,育华志远课程体系打造者. 率领团队为互联网行业 ...

  5. android加载二维码带中间logo

    android加载二维码带中间logo 很简单的,我也是先看了很多博客,然后总结了一下,感谢万能的网友 1导入依赖 //二维码加载依赖 implementation 'com.google.zxing ...

  6. Android 循环录制最近一段时间的视频

    Android 循环录制最近一段时间的视频 在日常开发测试中,往往发生问题了再去想办法复现录屏.抓取日志的工作,往往会出现偶现问题很难复现,导致问题很难定位.在这里给出一个能抓取历史操作视频的解决方案 ...

  7. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  8. Android Studio(十二):打包多个发布渠道的apk文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  9. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  10. Android 颜色渲染(二) 颜色区域划分原理与实现思路

    在前面的系列我已经将Android中颜色渲染的原理及使用做了一个整体上概述. 现在开始根据一个比较复杂的实现进行具体的分析,这就是PhotoShop中的调色板应用 首先还是看一下最终的实现效果:    ...

最新文章

  1. 技巧.自己学会取名字,学会欣赏
  2. 浅谈 Math.BigMul 方法
  3. Linux常用命令集锦
  4. 炼丹笔记 | 讲讲我们的故事
  5. deinstall 卸载grid_卸载Oracle 11g的Grid小计
  6. [MM9]复制格式的快捷操作
  7. 【CodeForces - 460C】Present(二分+树状数组)
  8. java gzip rest_RestTemplate与Gzip压缩
  9. python在windows配置_Python在windows平台的多版本配置
  10. ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建
  11. 新加用户被保护的解决办法
  12. 求解偏微分方程开源有限元软件deal.II学习--Step 10
  13. 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水(转载)
  14. 30天自制操作系统第二天
  15. js基础 js函数作用域链
  16. linux库函数pthread.h------pthread_rwlock_t读写锁说明
  17. 【9秒实验室自研】FLA文件资源导出工具 源码开放
  18. 使用FTP删不掉文件的解决方法
  19. pandas去除两列中同一行有相同元素的数据——数据分析必备技能(5)
  20. Wireshark抓包分析三次握手四次挥手

热门文章

  1. webpack入坑之旅(一)不是开始的开始
  2. LeetCode OJ:Linked List Cycle(链表循环)
  3. 【哈佛商评】好编辑成就内容营销
  4. Xcode 打包 framework
  5. vs2005设置使用符号服务器
  6. django mysql port,Django使用MySql数据库
  7. vs怎么设置php文件调试,使用vscode 编辑调试php 配置方与VSCode断点调试PHP
  8. 是谁关闭了Linux抢占,而抢占又关闭了谁?
  9. 第十二章 trie路由--基于Linux3.10
  10. setsebool命令和设置命令