轮播图我们用viewpager实现,所以第一步自然是在xml文件来个viewpager标记
然后在java主文件进行相关逻辑实现一、我们先来一个数据源,静态添加的数据
二、viewpager需要适配器,我们来一个自定义适配器继承于pageradapter,实现基本的四个方法
三、在主java文件实例化适配器,并将我们准备的数据传过去。
四、设置适配器的内容
四个方法所需的内容都已注释
public class MyDemoPagerAdapter extends PagerAdapter {
private List<Integer> list = new ArrayList<>();
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
// 因为我们返回的长度是最大长度,所以这边不能直接按照position获取,所以在这余一下
int i = position % list.size();
// 轮播图中是图片,所以来一个图片
ImageView imageView = new ImageView(container.getContext());
// 按照position,也就是我们余后的索引,得到每个图片资源
Integer integer = list.get(i);
// 给图片设置内容
imageView.setImageResource(integer);
// 设置好资源后需要将imageview这个东西添加到container中
container.addView(imageView);
// 最后返回我们的imageview
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// 切换视图的时候删除object对象
container.removeView((View) object);
}
@Override
public int getCount() {
// 因为轮播图要一直向下滑动,所以只返回数据长度的话就会滑到头,我们就给他最长的长度
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
// 官方推荐 view==object
return view==object;
}
public void setData(List<Integer> list) {
this.list = list;
}
}
五、查看半成品效果
(现在可以一直往下滑,但是左滑不了)
六、实现可以左滑的效果
// 设置viewpager所在的条目位置,我们给他折中
mydemo_viewpager.setCurrentItem(Integer.MAX_VALUE/2);
效果图:
现在虽然能左滑右滑无限滑了,但是不能自动轮播呀,下面实现七、实现自动轮播
在java主代码来一个handler,实现相关逻辑,注释以写清楚
Handler handler = new Handler();
// 来一个定时的
handler.postDelayed(new Runnable() {
@Override
public void run() {
// 得到viewpager的当前条目
int currentItem = mydemo_viewpager.getCurrentItem();
// 让当前条目自增1
currentItem++;
// 设置新的条目
mydemo_viewpager.setCurrentItem(currentItem);
// 让他循环一次后,停歇一秒继续执行此(当前)过程
handler.postDelayed(this,1000);
}
}, 3000);
综上所述,一个简单的半成品轮播图就好了。