Glide 4.0+的使用詳解

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只可播放本地視頻文件,不可播放網絡文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章