開發應用,經常需要加載網絡圖片來顯示。
如果自己去下載後顯示出來,遇到大量的圖片顯示,處理有些麻煩,緩存也可能會很大。
當然這些都可以想辦法處理,但是需要耗費很多時間。
所以有很多第三方的框架,實現了這些功能,能自動加載圖片並顯示,也能控制緩存大小,甚至可以根據界面的生命週期自動加載和暫停,使用非常方便。
以前使用過Picasso框架好長一段時間,但是非常小的概率會測到圖片顯示一半的情況。後來改用了Glide框架,再也沒測到過有什麼bug了。
所以這裏介紹下Glide的使用,這東西也是有些小坑,但是問題不大,按照以下方法,沒測到什麼問題。
使用方法:
一、添加依賴
compile 'com.github.bumptech.glide:glide:3.7.0'
二、封裝工具類
package com.dway.utils;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
/**
* 需要依賴:compile 'com.github.bumptech.glide:glide:3.7.0'
* Created by ldw on 2018/4/10.
*/
public class GlideUtil {
/**
* 加載圖片
* @param imageView 顯示的控件
* @param url 圖片地址
* @param errResId 加載失敗時的圖片
*/
public static void loadPic(Context context, ImageView imageView, String url, int errResId){
Glide.with(context.getApplicationContext())
.load(url)
.asBitmap()
.placeholder(errResId)
.error(errResId)
.centerCrop()
//.dontAnimate()
.into(imageView);
}
/**
* 可以傳入Activity、fragment等,會自動根據activity或fragment的生命週期加載和暫停加載
*/
public static void loadPicWithLifeCycle(Context context, ImageView imageView, String url, int errResId){
Glide.with(context)
.load(url)
.asBitmap()
.placeholder(errResId)
.error(errResId)
.centerCrop()
//.dontAnimate()
.into(imageView);
}
/**
* 不用緩存加載圖片
* @param imageView 顯示的控件
* @param url 圖片地址
* @param errResId 加載失敗時的圖片
*/
public static void loadPicWhihoutCache(ImageView imageView, String url, int errResId){
Glide.with(MyApp.getContext())
.load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.placeholder(errResId)
.error(errResId)
.into(imageView);
}
}
注意得這樣寫,最開始我按自己的想法調用了一些方法,出現一些奇怪的問題,具體不太記得了,可以自己寫個試下,但這樣寫法目前是沒問題的。
三、使用
GlideUtil.loadPic(context, itemHolder.iconView, dataList.get(position).cover, R.drawable.icon_loading);
這是在RecyclerView中的使用,很簡單,一句代碼就搞定了。