通过ViewPager 实现图片轮播

首先来个效果图

布局文件:

LinearLayout 用来存放下方的几个小白点。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.it.controlstudy.ViewPagerActivity"> <FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerHorizontal="true"> <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <LinearLayout
android:id="@+id/whitePoins_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:padding="5dp">
</LinearLayout>
</FrameLayout> </RelativeLayout>

我们要通过shape自定义一个图片来实现小白点显示

这个图片是当做ImageView的背景色来用的。

  1. 创建文件

  1. 自定义shape

shape:形状 size:大小 solid:填充色

蓝色的:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="10dp"
android:height="10dp"/>
<solid android:color="#22aadc"/>
</shape>

白色的:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="10dp"
android:height="10dp"/>
<solid android:color="#ffffff"/>
</shape>

代码部分

  • 定义控件 集合

      private List<ImageView> imageViewsList; //存放所有轮播图片的集合
private int images[]; //存放所有图片Id
private List<ImageView> imagePointsList; //存放小白点的ImageView集合 实现小白点功能
private int pageIndex = 0; //当前Viewpager页码 private LinearLayout whitePointsLayout; //所有小白点将会加到这个布局当中
private ViewPager viewPager;
  • 初始化控件 集合

      viewPager = (ViewPager) findViewById(R.id.viewPager);
whitePointsLayout = (LinearLayout) findViewById(R.id.whitePoins_layout);
imagePointsList = new ArrayList<>();
imageViewsList = new ArrayList<>();
//将图片加载到数组当中
images = new int[]{R.drawable.shanghai1, R.drawable.shanghai2, R.drawable.shanghai3};
        for (int i = 0; i < images.length; i++) {
//加载轮播图片ImageView集合
ImageView iv = new ImageView(ViewPagerActivity.this);
// 通过Glide 加载图片
Glide.with(ViewPagerActivity.this).load(images[i]).into(iv);
imageViewsList.add(iv); // 加载小白点ImageView集合
ImageView ivPoint = new ImageView(ViewPagerActivity.this);
ivPoint.setImageResource(R.drawable.bg_white);
//动态设置 Margins 属性 ,就是给每个小白点之间设置间距
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(10, 10, 10, 10);
ivPoint.setLayoutParams(lp); whitePointsLayout.addView(ivPoint); //将小白点图片添加到LinearLayout布局界面当中
imagePointsList.add(ivPoint);
}
imagePointsList.get(0).setImageResource(R.drawable.bg_blue); //默认选中第一个小白点为蓝色
  • 设置ViewPager 的 PagerAdapter

 PagerAdapter adapter = new PagerAdapter() {
@Override
public int getCount() {
return imageViewsList.size();
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override //设置当前显示View
public void setPrimaryItem(ViewGroup container, int position, Object object) {
//首先将所有点设置为白色
for (int i = imagePointsList.size() - 1; i >= 0; i--) {
imagePointsList.get(i).setImageResource(R.drawable.bg_white);
}
//再将选中的点设置为蓝色
imagePointsList.get(position).setImageResource(R.drawable.bg_blue);
pageIndex = position; //获取当前Pager的Index super.setPrimaryItem(container, position, object);
} @Override //添加View
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imageViewsList.get(position));
return imageViewsList.get(position);
} @Override //销毁不用的View
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageViewsList.get(position));
} }; //设置适配器
viewPager.setAdapter(adapter);

最后通过Timer实现图片自动切换

 //自动切换
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (pageIndex < (imageViewsList.size() - 1)) {
pageIndex++;
} else { //最后一张后切换为第一页
pageIndex = 0;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//设置选中的白点
imagePointsList.get(pageIndex).setImageResource(R.drawable.bg_blue);
//设置viewPager现实的页面 false 表示不显示动画效果
viewPager.setCurrentItem(pageIndex, false);
}
});
}
}; //表示一开始暂停5秒,然后每3秒执行一次run方法
timer.schedule(task, 5000, 3000);

通过ViewPager 实现图片轮播的更多相关文章

  1. 用viewpager实现图片轮播

    应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件.viewpager是android support v4 中提供的一个组件.viewpager使用需要以下几步骤: 1.在布局 ...

  2. Viewpager实现图片轮播

    //-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...

  3. Android ViewPager PagerAdapter 图片轮播

    ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类. ViewPager类需要一个PagerAdapter适配器类给它提供数据. ViewPager ...

  4. Android Viewpager实现图片轮播(仿优酷效果)

    1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...

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

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

  6. 使用FlaycoBanner实现图片轮播效果(加载网络图片)

    FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...

  7. Android 图片轮播(最简单的)

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  8. Android学习笔记之图片轮播...

    PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...

  9. Android中使用开源框架android-image-indicator实现图片轮播部署

    之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...

随机推荐

  1. 05VueCli

    详情请见: https://pizzali.github.io/2018/10/30/VueCli/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,Vue CLI 致力于将 Vue ...

  2. android实用软件tasker应用设置

    设置连接wifi和充电两个调试都满足的情况下打开同步和psiphon3:在端任意wifi是断开或断电时同步和关掉psiphon3. 其他没有问题去到关掉psiphon3时出现小意外,不能直接关闭程序( ...

  3. Python多进程与单进程效率对比

    运行环境:Python3 in win10 先生成200个测试文件 # generate.py i = 0 while i < 200: o = open("test\\" ...

  4. Chrome 禁止从页面打开 Data URI 网址了

    现如今,网民的网络账户被盗,很有可能是被“钓鱼”了.去年的一份安全报告中指出:“近85%的资金损失是通过钓鱼网址泄露支付信息造成的”. 传统的钓鱼网站通常是申请一个和被冒充网站相似的域名,比如 tao ...

  5. windows 下 bat 计划任务删除保留时间内文件

    date  windows 打印时间戳  年:echo %date:~,% 月:echo %date:~,% 日:echo %date:~,% 星期:echo %date:~,% 小时:echo %t ...

  6. Leetcode#461. Hamming Distance(汉明距离)

    题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = ...

  7. ng-app&data-ng-app

    来源stackoverflow 区别:在验证html5时,ng-app会抛出一个错误,而对带data-前缀的特性不会抛出.其它方面这两个属性一样.

  8. Linux的vim编辑器中的翻页命令

    当我们进入Linux的vim编辑器查看脚本时,按上下键查看是不是非常慢?这个时候就要用到我们的翻页快捷键了,快捷键命令如: 整页翻页命令为:Ctrl + f 键   f 的英文全拼为:forward: ...

  9. Sublime text3 连接sftp/ftp(远程服务器)

    1.按下Ctrl + Shift + P调出命令面板2.在输入框中输入Sftp,按回车下载3.建一个新的文件夹放到左边的项目栏中4.右击文件夹,选中SFTP/FTP,点击Map to Remote5. ...

  10. 深度学习在graph上的使用

    原文地址:https://zhuanlan.zhihu.com/p/27216346 本文要介绍的这一篇paper是ICML2016上一篇关于 CNN 在图(graph)上的应用.ICML 是机器学习 ...