Glide是Google推薦用的圖檔加載架構,很簡單就可以加載出圖檔了,如下:
Glide.with(context).load(ImgUrl).into(ImageView);
也可以加一些常用的功能,如placeHolder圖檔等等,如下:
Glide.with(context).load(ImgUrl)
.asBitmap()
.error(R.drawable.error)
.placeholder(R.drawable.loading)
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ImageView);
load(): String(檔案路徑,網絡位址),File(檔案資源),Integer(資源id);
asGif: 表示的gif動畫
asBitmap:表示靜态圖
diskCacheStrategy 磁盤緩存政策:
(1) DiskCacheStrategy.RESULT: 展示小大的圖檔緩存
(2) DiskCacheStrategy.ALL: 展示在控件中大小圖檔尺寸和原圖都會緩存
(3) DiskCacheStrategy.NONE:不設定緩存
(4) DiskCacheStrategy.SOURCE:原圖緩存
placeholder(R.drawable.loading): 目标從加載到展示時的控件的顯示狀态(多用網絡加載動畫)
error(R,drawable,error): 加載失敗時,控件顯示的圖檔。
into(ImageView): 展示的控件
使用Glide加載圖檔,下載下傳成功它會緩存一份到本地,提供Glide本身的加載政策,進而提高加載的速度
如果有些需求要拿到緩存的圖檔是怎麼做呢,那麼Glide的緩存是怎麼樣能拿到的呢?
答:Glide提供了一個downloadOnly() 接口來擷取緩存的圖檔檔案,但是前提必須要設定diskCacheStrategy方法的緩存政策為DiskCacheStrategy.ALL或者DiskCacheStrategy.SOURCE,還有downloadOnly()方法需要線上程裡進行,如下:
private class getImageCacheAsyncTask extends AsyncTask<String, Void, File> {
private final Context context;
public getImageCacheAsyncTask(Context context) {
this.context = context;
}
@Override
protected File doInBackground(String... params) {
String imgUrl = params[0];
try {
return Glide.with(context)
.load(imgUrl)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
} catch (Exception ex) {
return null;
}
}
@Override
protected void onPostExecute(File result) {
if (result == null) {
return;
}
//此path就是對應檔案的緩存路徑
String path = result.getPath();
Log.e("path", path);
Bitmap bmp= BitmapFactory.decodeFile(path);
img.setImageBitmap(bmp);
}
}
調用:
new getImageCacheTask(this).execute(“url”);
就可以擷取到緩存的圖檔顯示在imageView上了
上面對應的path就是Glide緩存圖檔的路徑,類似這樣的:
/data/data/包名/cache/image_manager_disk_cache/6872faf4075a6461f3d7ceb2e5ff625beeaae67d3b7e44a0d1e3cd332aa471dc.0
就這樣很輕松的擷取Glide的緩存
https://github.com/bumptech/glide/issues/459