通过ViewPager 实现图片轮播
通过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的背景色来用的。
创建文件

自定义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 实现图片轮播的更多相关文章
- 用viewpager实现图片轮播
应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件.viewpager是android support v4 中提供的一个组件.viewpager使用需要以下几步骤: 1.在布局 ...
- Viewpager实现图片轮播
//-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...
- Android ViewPager PagerAdapter 图片轮播
ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类. ViewPager类需要一个PagerAdapter适配器类给它提供数据. ViewPager ...
- Android Viewpager实现图片轮播(仿优酷效果)
1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- 使用FlaycoBanner实现图片轮播效果(加载网络图片)
FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...
- Android 图片轮播(最简单的)
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...
- Android学习笔记之图片轮播...
PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...
- Android中使用开源框架android-image-indicator实现图片轮播部署
之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...
随机推荐
- SQL 统计某一天的数据量时, 使用 dateValue(字段) 与 between 性能差异很明显。
感觉好久没有写sql语句了... 今天需要写一个统计某一天的数据时,考虑到字段的内容格式是: 2018-12-18 09:36:23 我开始写的是: select count(id) as reCo ...
- Vue的指令系统、计算属性和表单输入绑定
指令系统 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论).指令的职责是,当表达式的值改变 ...
- ZooKeeper-客户端命令 zkCli
执行 bin/zkCli 文件进入客户端 查看帮助 help ZooKeeper -server host:port cmd args stat path [watch] set path data ...
- Spring的事务机制
---恢复内容开始--- 内定的=>(只需要在xml 中添加一个bean) 在xml 中添加 <bean id="listener" class="com.t ...
- css长度单位学习(em,rem,px,vw,vh)
绝对长度单位 绝对长度单位代表一个物理测量 [像素px(pixels)] 像素,为影像显示的基本单位,译自英文"pixel",pix是英语单词picture的常用简写,加上英语单词 ...
- Wndows下Apache+php+Mysql环境的搭建及其涉及的知识(转)
一.安装Apache 1. 在网上搜索以下3个文件,以及找一个地方新建一个文件夹 好吧,这里有下载链接:http://pan.baidu.com/s/1hr9IdSS 文件夹内有:apache,mys ...
- Java并发之Thread类的使用
一.线程的几种状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wa ...
- 新手入门django本地化服务
自动化安装 #更新依赖库 pip install --upgrade setuptools #安装指定的版本 pip install Django==2.0.4 文 ...
- 51nod 1215 数组的宽度
若一个数在一段区间内作为最大值存在,那么答案应该加上这个数 若一个数在一段区间内作为最小值存在,那么答案应该减去这个数 所以我们利用单调栈,高效求出a[i]在哪个区间内作为最大/最小值存在,从而确定, ...
- Linux su切换用户后命令提示符变为bash-4.2$
2018-9-30 19:31:41 星期日 今天遇到一个问题, 给gitlab配置webhook的时候, 一个目录总是不能正确执行git pull 命令, 无任何输出, 根据之前经验, 感觉是权限的 ...