专栏首页非著名程序员教你如何用 RecyclerView 做一个好用的轮播图

教你如何用 RecyclerView 做一个好用的轮播图

引子

一般情况下,我们手机 App 上轮播图一般都是几张图来回循环,最多也就10几张,一般都是在10张以内的轮播。所以我们一般可能都是自己写,还有可能用到了别人写的第三方库。由此可能由于图片轮播数量不大,所以没有考虑复用机制,以致于放上百张图片或者上千张图片轮播时,导致应用崩溃,内存溢出的情况。

由于工作的需要,需要放上百张图片轮播,所以想做一个可能能够承受住的轮播,当然最节省内存的方式可能就是复用了。其实自己写复用也可以,配合 ViewPager ,但是想到了 RecyclerView 本身自带复用效果,那为何不用 RecyclerView 做一个呢?

灵感来源

来源其实很简单,那就是前几天刚刚分享的那篇文章《使用 RecyclerView 实现 Gallery 画廊效果,并控制 Item 停留位置》 ,那 RecyclerView 既然是可以做到画廊效果,还可以控制 Item 的停留位置,那就通过这个思路就可以实现轮播图效果啊。所以就有了下面的方法。

使用方法

在这里呢,我把我实现的轮播图做成了一个轮播库放到了 GitHub 上了,有兴趣的可以直接下载源码研究一下我是怎么实现的,具体的代码介绍直接看我源码即可。

源码地址:https://github.com/loonggg/RecyclerViewBanner

先看效果图:

使用方法如下:

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

  allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
  }

Step 2. Add the dependency

    dependencies {
        compile 'com.github.loonggg:RecyclerViewBanner:v1.1'
    }

Step 3. There are a few xml attributes to customise the RecyclerViewBanner

  • pointFocusBg 设置底部导航小圆点的选中状态颜色
  • pointUnfocusBg 设置底部导航小圆点的未选中状态颜色
  • interval 设置轮播图滚动间隔时间
  • isShowPoint 设置是否显示底部指示导航小圆点
Example
<com.loonggg.rvbanner.lib.RecyclerViewBanner
        android:id="@+id/rv_banner"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        loonggg:interval="3000"
        loonggg:isShowPoint="true" />

Step 4. Impelement Listener

        recyclerViewBanner = (RecyclerViewBanner) findViewById(R.id.rv_banner);
        final List<Banner> banners = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            banners.add(new Banner("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487221110004&di=d6043e4b0c90ddf3ea5096c3d8eb8f58&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2014%2F067%2F5116EPAUD762_1000x500.jpg"));
            banners.add(new Banner("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487221129421&di=c085432cf7c15836f8a6479138740f39&imgtype=0&src=http%3A%2F%2Fimage85.360doc.com%2FDownloadImg%2F2015%2F05%2F0517%2F53199602_2.jpg"));
            banners.add(new Banner("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487221161254&di=fbb99c5dad3d5a2a2c8b0b44e8c0e081&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2013%2F255%2FP52AOTE73EIG_1000x500.jpg"));
        }
        recyclerViewBanner.isShowIndicatorPoint(true);
        recyclerViewBanner.setRvBannerDatas(banners);
        recyclerViewBanner.setOnSwitchRvBannerListener(new RecyclerViewBanner.OnSwitchRvBannerListener() {
            @Override
            public void switchBanner(int position, ImageView bannerView) {
                Glide.with(bannerView.getContext()).load(banners.get(position % banners.size()).getUrl()).placeholder(R.mipmap.ic_launcher).into(bannerView);
            }
        });
        recyclerViewBanner.setOnRvBannerClickListener(new RecyclerViewBanner.OnRvBannerClickListener() {
            @Override
            public void onClick(int position) {
                //点击事件
            }
        });

源码地址:https://github.com/loonggg/RecyclerViewBanner

本文分享自微信公众号 - 非著名程序员(non-famous-coder),作者:loonggg

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AndroidTShare Weekly No.8

    非著名程序员技术周报第八期,我们今天来回顾一下本周技术文章的分享和哪些热点开源项目,以及相关技术新闻。看过上期的同学都知道,周报改版了,不仅仅只是回顾重复的技术...

    非著名程序员
  • AndroidTShare Weekly No.11

    本期热点开源项目 FreshDownloadView 一个下载动画,下载完成和失败的时候会有酷酷的动画,非常炫酷和使用。 效果图如下: ? 作者:dudu90 ...

    非著名程序员
  • AndroidTShare Weekly No.9

    本周热点开源项目 夜间模式渐变实现 这个实现了夜间模式渐变效果了,过渡的非常自然。 效果图如下: ? 作者:chkfung 项目开源地址:https://gi...

    非著名程序员
  • 聊聊jump consistent hash

    jump consistent hash是一致性哈希的一种实现,论文见A Fast, Minimal Memory, Consistent Hash Algor...

    codecraft
  • 微信扫码登录实战(附代码)

    导读: 由于微信端流量比较足,所以扫码登录系统功能也受到了很多系统的青睐,本文就来详细的解开该技术的面纱。 优质内容请关注微信公众号“Web项目聚集地”

    用户1093975
  • 微信扫码登录实战(附代码)

    导读:由于微信端流量比较足,所以扫码登录系统功能也受到了很多系统的青睐,本文就来详细的解开该技术的面纱。

    Java团长
  • 11.25 配置防盗链

    配置防盗链目录概要 通过限制referer来实现防盗链的功能 配置文件增加如下内容 Directory针对目录进行 <Directory /data/www...

    运维小白
  • linux学习第三十九篇:Apache用户认证,域名跳转,Apache访问日志

    Apache用户认证 虚拟主机的配置文件: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ...

    用户1215343
  • Web Fundamentsals学习1-Multiple-Screen-Site

    你的一个运行于多设备网站(Your First Multi-device Site) ? 遵循的步骤: 1.定义信息架构(information archite...

    八哥
  • 互联网/电商/广告常见的术语

    在公司看文档的时候,经常看到一些专业的术语,很尴尬,看不懂。比如说gmv,dau等等

    Java3y

扫码关注云+社区

领取腾讯云代金券