android-简单轮播图的实现

轮播图我们用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);

在这里插入图片描述
综上所述,一个简单的半成品轮播图就好了。还有点击事件呀,指示器呀。后面有机会(学会了)补上

猜你喜欢

转载自blog.csdn.net/Willow_Spring/article/details/112792744