圖片加載很是重要,我也對(duì)比過(guò)別的庫(kù),覺(jué)得還是Glide好用,我只是簡(jiǎn)單的分享下我開發(fā)用到的相關(guān)使用方法
如果想深入研究下可以參考Glide最全解析
Glide的配置
配置很簡(jiǎn)單,只要在Module的Gradle添加依賴即可
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:25.3.0'
當(dāng)然,如果涉及到網(wǎng)絡(luò)加載圖片,記得添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET" />
Glide的使用
初始化
Glide支持Activity和Fragment的綁定
Glide.with(Context context);
Glide.with(Activity activity);
Glide.with(FragmentActivity activity);
Glide.with(Fragment fragment);
將Activity/Fragment作為with()參數(shù)的好處是:圖片加載會(huì)和Activity/Fragment的生命周期保持一致
加載資源
Glide支持網(wǎng)絡(luò)資源、assets資源、Resources資源、File資源、Uri資源、字節(jié)數(shù)組
Glide.with(this).load("http://pic9/258/a2.jpg").into(iv);
Glide.with(this).load("file:///xxx.jpg").into(iv);
Glide.with(this).load(R.mipmap.ic_launcher).into(iv);
Glide.with(this).load(file).into(iv);
Glide.with(this).load(uri).into(iv);
Glide.with(this).load(byte[]).into(iv);
加載gif圖片
- 加載靜態(tài)gif圖片(靜態(tài)就是gif相當(dāng)于一張圖片)
Glide.with(this).load(imageUrl).asBitmap().into(iv);
- 加載動(dòng)態(tài)gif圖片(gif是動(dòng)的)
Glide.with(this).load(imageUrl).asGif().into(iv);
- 顯示本地視頻
Glide 還能顯示視頻!只要他們是存儲(chǔ)在手機(jī)上的。假設(shè)你通過(guò)讓用戶選擇一個(gè)視頻后得到了一個(gè)文件路徑:
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide .with( context )
.load( Uri.fromFile(new File( filePath)))
.into( iv);
這里需要注意的是,這僅僅對(duì)本地視頻起作用。如果沒(méi)有存儲(chǔ)在該設(shè)備上的視頻(如一個(gè)網(wǎng)絡(luò) URL 的視頻),它是不工作的!
設(shè)置加載中和加載失敗的圖片
- 設(shè)置加載中圖片
.placeholder(R.drawable.placeholder)
- 設(shè)置加載失敗圖片
.error(R.drawable.error)
- 設(shè)置縮略圖支持
//先加載縮略圖 然后在加載全圖
Glide.with(this)
.load(imageUrl)
.thumbnail(0.1f)
.into(iv);
設(shè)置加載動(dòng)畫
- 默認(rèn)是淡入淡出動(dòng)畫
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.crossFade(int duration)//去減慢(或加快)動(dòng)畫
.into(iv);
- 使用 crossFade()
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.crossFade()//動(dòng)畫默認(rèn)的持續(xù)時(shí)間是 300毫秒
.into(iv);
- 添加自定義動(dòng)畫
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.animate(R.anim.fade_in)
.into(iv);
- 去除動(dòng)畫
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.dontAnimate()
.into(iv);
縮放圖像
- CenterCrop 即縮放圖像至填充到ImageView內(nèi),裁剪額外的部分。ImageView會(huì)完全填充,但圖像可能不會(huì)顯示不全。
Glide.with(this)
.load(url)
.centerCrop ()
.into(iv);
- fitCenter() 圖片會(huì)按照imageview長(zhǎng)寬中最小的邊界作為依據(jù),按比例縮放圖像。該圖像將會(huì)完全顯示,但可能不會(huì)填滿整個(gè) ImageView。
Glide.with(this)
.load(url)
.fitCenter()
.into(iv);
設(shè)置監(jiān)聽回調(diào)
Glide.with(this)
.load(imageUrl)
.listener(RequestListener listener)
.into(iv);
設(shè)置加載尺寸
- 指定尺寸(圖片大小在xml中不能寫死,是wrap_content才可以指定尺寸)
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.override(600,600)
.into(iv);
設(shè)置緩存策略
- 設(shè)置跳過(guò)內(nèi)存緩存
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.skipMemoryCache(true)
.into(iv);
- 設(shè)置緩存策略
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(iv);
DiskCacheStrategy.ALL //緩存源資源和轉(zhuǎn)換后的資源
DiskCacheStrategy.NONE//不做任何磁盤緩存
DiskCacheStrategy.RESULT //緩存轉(zhuǎn)換后的資源
DiskCacheStrategy.SOURCE緩存源資源
- 清理磁盤緩存
Glide.get(this).clearDiskCache();//在子線程中進(jìn)行
- 清理內(nèi)存緩存
Glide.get(this).clearMemory();//可以在主線程
- 設(shè)置磁盤緩存目錄和圖片效果(默認(rèn)Bitmap格式是RGB_565)
- 在AndroidManifest中application節(jié)點(diǎn)下:
<!--glide緩存目錄設(shè)置-->
<meta-data
android:name="包名.widget.GlideModuleConfig"
android:value="GlideModule" />
- 創(chuàng)建類GlideModuleConfig
public class GlideModuleConfig implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
//內(nèi)部存儲(chǔ)/Android/data/包名/cache/glide-images
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glide-images", 2 * 1024 * 1024));
//將默認(rèn)的RGB_565效果轉(zhuǎn)換到ARGB_8888
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
//不做處理
}
}
BitmapTransformation
Glide在Github上還有一個(gè)庫(kù),可以處理圖片效果,比如裁剪、圓角、高斯模糊等等
- 引入依賴庫(kù)
compile 'jp.wasabeef:glide-transformations:2.0.1'
- 實(shí)現(xiàn)高斯模糊
//radius取值1-25,值越大圖片越模糊
Glide.with(context)
.load(url)
.bitmapTransform(new BlurTransformation(context, radius))
.into(iv);
- 原圖基礎(chǔ)上變換設(shè)置圓形圖
Glide.with(context)
.load(url)
.bitmapTransform(new CropCircleTransformation(this))
.into(iv);
- 原圖基礎(chǔ)上變換成圓圖 +毛玻璃(高斯模糊)
Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this, 25), new CropCircleTransformation(this))
.into(iv);
- 原圖處理成圓角
//如果是四周已經(jīng)是圓角則RoundedCornersTransformation.CornerType.ALL
Glide.with(this)
.load(url)
.bitmapTransform(new RoundedCornersTransformation(this, 30, 0, RoundedCornersTransformation.CornerType.BOTTOM))
.into(iv);