一、Glide簡介
Glide 是 Google 員工的開源項目, Google I/O上被推薦使用,一個高效、開源、Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache2.0協議發布。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網絡協議棧里。
二、Glide特點
1. 使用簡單
2. 可配置度高,自適應程度高
3. 支持常見圖片格式,jpg、png、gif、webp
4. 支持多種數據源,網絡、資源、assets 、File、Uri等
5. 高效緩存策略支持內存和硬盤緩存
6. 生命周期集成根據Activity/Fragment生命周期自動管理請求
7. 高效處理Bitmap
三、
Android Studio導入依賴
compile 'com.github.bumptech.glide:glide:3.7.0'
四、設置綁定生命周期
1. 綁定Context
Glide.with(Context context);
2. 綁定Activity
Glide.with(Activity activity);
3. 綁定FragmentActivity
Glide.with(FragmentActivity activity);
4. 綁定Fragment
Glide.with(Fragment fragment);
【注】將Activity/Fragment作為with()參數的好處是,圖片加載會和Activity/Fragment的生命周期保持一致,比如 Paused狀態在暫停加載,在Resumed的時候又自動重新加載。
五、加載資源
1. 加載網絡資源
Glide.with(context).load(quot;http://i.imgur.com/1opCuAV.jpgquot;).into(imageView);
2. 加載assets資源
Glide.with(context).load(quot;file:///android_asset/hb_head.pngquot;).into(imageView);
3. 加載Resources資源
Glide.with(context).load(R.mipmap.ic_launcher).into(imageView);
4. 加載File資源
Glide.with(context).load(file).into(imageView);
5. 加載Uri資源
Glide.with(context).load(uri).into(imageView);
6. 加載字節數組
Glide.with(context).load(byte[]).into(imageView);
六、設置加載中和加載失敗的圖片
設置加載中圖片
.placeholder(R.drawable.user_placeholder)
設置加載失敗圖片
.error(R.drawable.user_placeholder_error)
七、設置縮略圖支持
Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);
【注】先加載縮略圖 然后在加載全圖
八、加載GIF
顯示gif靜態圖片
Glide.with(this).load(imageUrl).asBitmap().into(imageView);
顯示gif動態圖片
Glide.with(this).load(imageUrl).asGif().into(imageView);
九、設置加載動畫
Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
十、設置請求監聽
Glide.with(this).load(imageUrl).listener(RequestListener listener).into(imageView);
十一、設置加載尺寸
Glide.with(this).load(imageUrl).override(800, 800).into(imageView);
centerCrop():拉伸截取中間部分顯示
fitCenter():等比拉伸填滿ImageView
十二、自定義圖片轉換
自定義BitmapTransformation
class RoundTransformation extends BitmapTransformation{
public RoundTransformation(Context context) {
super(context);
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform,
int outWidth, int outHeight) {
//根據需要,進行Bitmap轉換
Bitmap roteBmp = BitmapUtils.getRoundCornerBitmap(toTransform, 360);
if (roteBmp != toTransform) {
toTransform.recycle();
}
return roteBmp;
}
@Override
public String getId() {
return quot;glidequot;;
}
}
設置圖片轉換
Glide.with(this).load(imageUrl)
.transform(newRoundTransformation(this))
.into(imageView);
十三、緩存策略
1. 設置跳過內存緩存
Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);
2. 設置緩存策略
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
【注】
DiskCacheStrategy.ALL 緩存源資源和轉換后的資源
DiskCacheStrategy.NONE 不作任何磁盤緩存
DiskCacheStrategy.SOURCE 緩存源資源
DiskCacheStrategy.RESULT 緩存轉換后的資源
3. 清理緩存
清理磁盤緩存 需要在子線程中執行
Glide.get(this).clearDiskCache();
清理內存緩存 可以在UI主線程中進
Glide.get(this).clearMemory();
Tags: Bitmap 安卓開發
文章來源:http://www.jianshu.com/p/9dfaf112b970