Glide是一個快速高效的圖像加載庫,專注於平滑滾動。
Glide提供了一個易於使用的API,一個性能可擴展的資源解碼流水線和自動資源池。
Glide支持網絡,解碼和顯示視頻靜止圖像,圖像和動畫GIF
使用前準備
官方地址:https://github.com/bumptech/glide
1.gradle中使用
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
google()
}
dependencies {
compile 'com.github.bumptech.glide:glide:4.8.0'
compile 'com.android.support:support-v4:25.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
}
2.maven
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>compiler</artifactId>
<version>4.8.0</version>
<optional>true</optional>
</dependency>
使用glide的基本模式
加載圖片:
Glide.with(fragment)
.load(url)
.into(imageView);
取消加載(必須在子線程):
Glide.with(fragment).clear(imageView);
手動調用clear方法可以清除掉我們之前給view添加的圖片,當然一般我們不需要這麼做,因爲在into()方法調用之前,會自動調用一次clear()方法清除掉之前的加載
方法
1.with()
with方法需要傳入一個上下文對象,可以是activity,fragment,context或者fragmentActivity,對應圖片加載的生命週期。返回requestManager對象。
2.load()
看傳入的參數就可以發現我們能加載的哪些途徑的圖片
1. load(string)、load(url):加載網絡圖片
Glide.with(this).load(url).into(imageView); 或
String path = "file://"+ Environment.getExternalStorageDirectory().getPath()+"/mypic.jpg";
Glide.with(this).load(path).into(imageView);
2.load(uri):從uri獲取
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.mipmap.ic_launcher);
Glide.with(this).load(uri).into(imageView);
3.load(File file) 從文件加載
Glide.with(this).load(file).into(imageView);
4.load(Integer resourceId) 從Resource中加載
Glide.with(this).load(R.mipmap.ic_launcher).into(imageView);
5.load(byte[] model)
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.error);
byte[] model = Bitmap2Bytes(bmp);
Glide.with(this).load(model).into(imageView);
public byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
DrawableTypeRequest
load方法返回一個DrawableTypeRequest對象,DrawableTypeRequest提供了一些我們在加載圖片的時候可以使用方法,我們可以根據我們的需要來調用相應的方法
1. placeholder
佔位圖,也就是從開始加載到加載結束這段時間內顯示的默認圖片,placeholder有兩個重載方法:
同時,也可以傳入一個顏色值
Glide.with(this).load(url).placeholder(R.mipmap.loading).into(imageView);
Glide.with(this).load(url).placeholder(R.color.colorAccent).into(imageView);
2.error
異常圖,加載出現異常的時候顯示的圖片,使用方法和placeholder一樣,也可以傳顏色值
3.fallback
設置model爲空時顯示的Drawable。
4.skipMemoryCache
該方法可以設置圖片不緩存到內存中,默認緩存,此方法必須在UI線程調用
5.diskCacheStrategy
DiskCacheStrategy.ALL 緩存所有版本圖片,這是Glide默認磁盤緩存策略
DiskCacheStrategy.NONE 不緩存
DiskCacheStrategy.SOURCE 緩存原始圖片
DiskCacheStrategy.RESULT 緩存最終圖像,也就是根據ImageView大小轉換後的圖片
6.override
代碼中指定imageview的大小
Glide.with(this).load(url).override(200,200).into(imageView);
需要注意的是這裏的單位是像素
7.CenterCrop() & .fitCenter()
CenterCrop()縮放圖像讓它填充到 ImageView 界限內並且裁剪額外的部分,ImageView 可能會完全填充,但圖像可能不會完整顯示。
fitCenter()縮放圖像讓圖像測量出來等於或小於 ImageView 的邊界範圍。該圖像將會完全顯示,但可能不會填滿整個 ImageView。
Glide.with(this).load(url).fitCenter().into(imageView);
8.thumbnail
縮略圖,限價在縮略圖在加載要顯示的圖片
Glide.with(this).load(url).thumbnail(0.1f).into(imageView);
可以加載一個URL圖片作爲縮略圖
DrawableRequestBuilder<String> thumbnailRequest = Glide.with(this).load(thumbUrl);
Glide.with(this).load(url).thumbnail(thumbnailRequest).into(imageView);
9.priority
設置請求的優先級,此方法給定了如下幾個可選值,它們的優先級依次遞減:
public enum Priority {
IMMEDIATE,
HIGH,
NORMAL,
LOW, priority,
}
10.crossFade() & .dontAnimate() & .animate()
.crossFade() 表示淡入淡出效果
.dontAnimate() 表示無動畫效果
.animate() 可以加載我們自己定義的動畫
11.listener
監聽請求狀態,此方法需要一個RequestListener類型參數,有兩個回調方法;
onException返回true表示我們自己處理掉了異常,false表示交給Glide去處理;方法最好返回false,這樣的話Glide會自動回調.error();
onResourceReady返回true表示用戶自己已經設置好資源,包括截取操作,動畫操作之類的,準備好顯示;false表示交給Glide。
Glide.with(this)
.load(url)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.error(R.mipmap.error)
.into(imageView);
12. Gif的加載
一般情況下和加載靜態圖片一樣
Glide.with(this).load(gifUrl).into(imageView);
當然也提供了設置加載的圖片類型
.asBitmap() 無論你傳入的URL對應的是不是一個Gif,Glide都會把它當做靜態圖,這時的靜態圖會停留在Gif的第一幀
.asGif() 無論你傳入的URL對應的是不是一個Gif,Glide都會把它當做Gif來處理,如果不是,Glide會回調.error()方法
13.Glide播放本地視頻
Glide.with(this).load(Uri.fromFile(new File(filePath))).into(imageView);
注意:Glide只可播放本地視頻文件,不可播放網絡文件。