通常狀況下,咱們手機 App 上輪播圖通常都是幾張圖來回循環,最多也就10幾張,通常都是在10張之內的輪播。因此咱們通常可能都是本身寫,還有可能用到了別人寫的第三方庫。由此可能因爲圖片輪播數量不大,因此沒有考慮複用機制,以至於放上百張圖片或者上千張圖片輪播時,致使應用崩潰,內存溢出的狀況。javascript
因爲工做的須要,須要放上百張圖片輪播,因此想作一個可能可以承受住的輪播,固然最節省內存的方式可能就是複用了。其實本身寫複用也能夠,配合 ViewPager ,可是想到了 RecyclerView 自己自帶複用效果,那爲什麼不用 RecyclerView 作一個呢?java
來源其實很簡單,那就是前幾天剛剛分享的那篇文章《使用 RecyclerView 實現 Gallery 畫廊效果,並控制 Item 停留位置》 ,那 RecyclerView 既然是能夠作到畫廊效果,還能夠控制 Item 的停留位置,那就經過這個思路就能夠實現輪播圖效果啊。因此就有了下面的方法。android
在這裏呢,我把我實現的輪播圖作成了一個輪播庫放到了 GitHub 上了,有興趣的能夠直接下載源碼研究一下我是怎麼實現的,具體的代碼介紹直接看我源碼便可。git
源碼地址:github.com/loonggg/Rec…程序員
Step 1. Add the JitPack repository to your build filegithub
Add it in your root build.gradle at the end of repositories:微信
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}複製代碼
Step 2. Add the dependencymaven
dependencies {
compile 'com.github.loonggg:RecyclerViewBanner:v1.1'
}複製代碼
Step 3. There are a few xml attributes to customise the RecyclerViewBanneride
pointFocusBg 設置底部導航小圓點的選中狀態顏色
pointUnfocusBg 設置底部導航小圓點的未選中狀態顏色
interval 設置輪播圖滾動間隔時間
isShowPoint 設置是否顯示底部指示導航小圓點複製代碼
<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" />複製代碼
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) {
//點擊事件
}
});複製代碼
源碼地址:github.com/loonggg/Rec…gradle
歡迎你們關注個人技術分享公衆號:非著名程序員(smart_android)。技術文章均先首發於個人技術分享的微信公衆號。