在RecyclerView里使用图片轮播

来源:互联网 发布:mysql 唯一约束 编辑:程序博客网 时间:2024/06/08 06:00

图片轮播控件Banner,结合MultiType框架使用

前段时间学习了基于RecyclerView的MultiType框架,
最近在做项目的时候碰到需要在RecyclerView里使用图片轮播的功能,所以我就准备在项目中将图片轮播和MultiType框架结合使用。
为了加深印象,特将项目中的一些代码记录下来,以便以后翻阅查询。

网上的图片轮播代码不计其数,作为懒到极致的我来说自然是找个容易上手的框架更为实际。在此我用的是github上大神的框架,
这里放上作者的github地址:https://github.com/youth5201314/banner
感谢大神的无私奉献。
对于新手的我来说该框架出奇的好用,特别适合初学者和像我这样的新手。

作者的github页面是这样介绍这款框架的:
- Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

在我粗略翻阅了一遍之后便对该框架的使用有了初步的了解,上手起来也特别容易。
以下是我结合MultiType框架开发的步骤:
1、在项目的build.gradle中添加以下依赖:

//picasso 图片加载框架compile 'it.sephiroth.android.library.picasso:picasso:2.5.2.4b'//multytype框架compile 'me.drakeet.multitype:multitype:2.4.1'//图片轮播控件compile 'com.youth.banner:banner:1.4.8'

2、将以下布局添加到布局文件中

<com.youth.banner.Banner    <!-- 若作为布局文件的最外层,需要添加该行代码 -->    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/banner_fragment_first_pic_loop"    android:layout_width="match_parent"    android:layout_height="180dp"/>

注:该布局可以单独作为一个布局文件,也可以添加到ViewGroup中

3、自定义一个图片加载器类继承ImageLoader,并重写displayImage方法,
如下所示:

/** * 图片加载器 */public class PicLoopImageLoader extends ImageLoader {    @Override    public void displayImage(Context context, Object path, ImageView imageView) {        Picasso.with(context).load((String) path).into(imageView);        //图片加载也可以用Glide的框架        //Glide.with(context).load((String)path).into(imageView);    }}

4、在ViewProvider里的ViewHolder里定义一个banner对象

class PicLoopViewHolder extends RecyclerView.ViewHolder {    Banner banner;    public PicLoopViewHolder(Banner banner) {        super(banner);        this.banner = banner;    }}

5、随后在onCreateViewHolder方法里找到包含Banner的布局文件

@NonNull@Overrideprotected PicLoopViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {    Banner banner = (Banner) inflater.inflate(R.layout.fragment_first_pic_loop, parent, false);    return new PicLoopViewHolder(banner);}

在该项目中我是将Banner的布局单独作为一个布局文件,因此上述代码直接找到的是Banner控件对象,将Banner对象直接传给ViewHolder

6、在onBindViewHolder里使用ViewHolder中的banner对象

 holder.banner.setImageLoader(new PicLoopImageLoader())               //设置banner的样式                .setBannerStyle(BannerConfig.CIRCLE_INDICATOR)                //这里传的是图片的地址集合                .setImages(picLoop.getImageList())                 .setDelayTime(2500)  //设置图片轮播的间隔                .setIndicatorGravity(BannerConfig.RIGHT)                .start();

查看BannerConfig的源码可知有以下几种样式可供选择:

BannerConfig.NOT_INDICATOR=0;BannerConfig.CIRCLE_INDICATOR=1;BannerConfig.NUM_INDICATOR=2;BannerConfig.NUM_INDICATOR_TITLE=3;BannerConfig.CIRCLE_INDICATOR_TITLE=4;BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE=5;

7、在Activity或Fragment里设置RecyclerView,LayoutManager,adapter等,具体步骤查找MultiType部分的代码

放上图片轮播部分的截图:

图片轮播

0 0