ListView的headerView设置为轮播图之后结合上/下拉刷新/加载的模式成为现在大多数APP的一个必须具备的功能,对于许多初学者来说想要实现轮播图这样一个集线程睡眠、自动处理、替换过程中刷新UI界面的组合功能非常困难,没有思路,感觉无从下手,去搜索各种实现方案,发现目前充斥着大量的类似于使用弃用组件Gallery这样的例子。
本篇博客将通过分析轮播图的各个注意事项及实现思路来实现一个简易的轮播图。
首先看下一下效果图;
需求: 1.轮播,如轮播四张图:到第四张之后不会回到第一张而是继续向下一张切换;
2.初始状态即可向前滑动
3.轮播过程中会有状态切换以白点和黑点的方式呈现;
ps:这里的魂斗罗见到有没有热血沸腾,情怀所在;
实现步骤:
一、轮播图部分采用的是ViewPager显示Layout布局,替换图片的方式
1.为了让图片滑到最后一张不是以翻页的形式回到首页,getCount方法返回的是int最大值,这样就会有很多页;
2.由于getCount方法返回整型最大值,所以使用的position采用取余的计算方法,虽然position会一直增加,但是显示的数据始终为固定数量;
package com.wu.rotateimgdemo;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by wubihang on 16/9/12.
*/
public class RotateVpAdapter extends PagerAdapter{
private List datas;
private Context context;
private LayoutInflater inflater;
public RotateVpAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}
public void setDatas(List datas) {
this.datas = datas;
notifyDataSetChanged();
}
@Override
public int getCount() {
// 为了让ViewPager到最后一页不会像翻书一样回到第一页
// 设置页数为int最大值,这样向下滑动永远都是下一页
return datas == null ? 0 : Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// position是int最大值所以这里可能是几百甚至上千,因此取余避免数组越界
int newPosition = position % datas.size();
View convertView = inflater.inflate(R.layout.item_vp, container, false);
ImageView imageView = (ImageView) convertView.findViewById(R.id.item_iv);
TextView textView = (TextView) convertView.findViewById(R.id.item_tv);
textView.setText("文字内容" + newPosition);
imageView.setImageReso