1. 程式人生 > >(原創)詳解Glide圖片載入庫常用方法

(原創)詳解Glide圖片載入庫常用方法

Glide作為安卓開發常用的圖片載入庫,有許多實用而且強大的功能,那麼,今天就來總結一番,這次把比較常見的都寫出來,但並不是全部哦。

在介紹之前,先來說說什麼是Glide吧:

在泰國舉行的谷歌開發者論壇上,谷歌為我們介紹了一個名叫 Glide 的圖片載入庫,作者是bumptech。這個庫被廣泛的運用在google的開源專案中,包括2014年google I/O大會上釋出的官方app。

Glide和Picasso有90%的相似度,準確的說,就是Picasso的克隆版本。但是在細節上還是有不少區別的。

Glide的使用非常方便,而且使用了鏈式程式設計,所以方法直接連線寫在後便就可以了。以下是我平常總結的比較常用的Glide方法

1:Glide的配置

compile 'com.github.bumptech.glide:glide:3.7.0'

2最簡單的用法

非同步載入圖片:

Glide.with(context).load(url).into(imageView);

這是最簡單的用法了,with裡填上下文,load裡面填寫url,into填寫要下載到的控制元件上即可

3設定佔位圖和錯誤圖:

placeholder(R.drawable.user_placeholder)

error(R.drawable.user_placeholder_error)

4 load方法的使用

Glide基本可以load任何可以拿到的媒體資源,如:

load SD卡資源:load("file://"+Environment.getExternalStorageDirectory().getPath()+"/test.jpg")

load assets資源:load("file:///android_asset/f003.gif")

load raw資源:load("android.resource://包名/raw/raw_1")

     或load("android.resource://包名/raw/"+R.raw.raw_1)

load drawable資源:load("android.resource://包名/drawable/"+R.drawable.news)

load ContentProvider資源:load("content://media/external/images/media/139469")

load http資源:load("http://img.my.csdn.net/uploads/201508/05/1438760757_3588.jpg")

load https資源:load("https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp")

當然,load不限於String型別,還可以:

load(Uri uri),

load(File file),

load(Integer resourceId),

load(URL url),

load(byte[] model),

load(T model),

loadFromMediaStore(Uri uri)。

5設定快取策略

diskCacheStrategy(DiskCacheStrategy.ALL)

可選策略:

DiskCacheStrategy.SOURCE:快取原始資料;

DiskCacheStrategy.RESULT:快取變換(如縮放、裁剪等)後的資源資料;

DiskCacheStrategy.NONE:什麼都不快取(不進行磁碟快取);

DiskCacheStrategy.ALL:快取SOURC和RESULT;

預設採用DiskCacheStrategy.RESULT策略;

對於download only操作要使用DiskCacheStrategy.SOURCE;

6清空快取

禁止記憶體快取:

.skipMemoryCache(true)

清除記憶體快取:

// 必須在UI執行緒中呼叫

Glide.get(context).clearMemory();

禁止磁碟快取:

.diskCacheStrategy(DiskCacheStrategy.NONE)

清除磁碟快取:

// 必須在後臺執行緒中呼叫,建議同時clearMemory()

Glide.get(applicationContext).clearDiskCache();

7設定請求優先順序

priority(Priority.HIGH)

優先順序越高越優先載入,但不保證所有圖片都按序載入。可選引數:

列舉Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW。預設為Priority.NORMAL。

8 設定縮圖

thumbnail()

9 直接獲得Bitmap

有些時候我們並不希望把圖片放入ImageView中。我們只要 Bitmap 本身。Glide 提供了一個用 Targets 的簡單的方式去接受圖片資源的 Bitmap。Targets 是回撥函式,它在 Glide 做完所有的載入和處理之後返回結果。

方法1

Glide.with(this).load(url).asBitmap().into(newSimpleTarget<Bitmap>() {

    @Override

    public voidonResourceReady(Bitmap resource, GlideAnimation<? super Bitmap>glideAnimation) {

         //resource即是獲得的Bitmap

    }

});

方法2

Bitmap bitmap =Glide.with(MainActivity.this).load(url).asBitmap().into(500, 500).get();

該方式只能在子執行緒中獲得

10載入圖片到Notification中

NotificationTarget notificationTarget =

new NotificationTarget(

     Context,

     RemoteViews,

     viewid,

     notificationObject,

     notifyId);

Glide.with(this).load(url).asBitmap().into(notificationTarget);

11 Glide自帶的一個漸變動畫

Glide.with(this).load(url).crossFade([duration]).into(iv2);

12載入Gif

//普通顯示GIF

Glide.with( context ).load( gifUrl ).into( iv );

//新增GIF檢查,如果不是GIF就會顯示載入失敗點陣圖

Glide.with( context ).load( gifUrl ).asGif().into( iv);

13顯示本地視訊

String filePath ="/storage/emulated/0/Pictures/example_video.mp4";

Glide 

    .with(context )

    .load(Uri.fromFile( new File( filePath ) ) )

    .into( iv );

Glid只能載入本地視訊,不能從網路中獲取

14顯示圓形圖片

Glide.with(context).load(url)
        .asBitmap()
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .thumbnail(0.1f)
        .centerCrop()
        .into(new BitmapImageViewTarget(cimg) {
            @Override
protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable circularBitmapDrawable =
                        RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCircular(true);
cimg.setImageDrawable(circularBitmapDrawable);
}
        });

15設定縮放方式

Glide載入的圖片可以設定兩種縮放方式,具體介紹如下:

1: CenterCrop()是一個裁剪技術,即縮放影象讓它填充到 ImageView 界限內並且裁剪額外的部分。ImageView 可能會完全填充,但影象可能不會完整顯示。

2: fitCenter() 是裁剪技術,即縮放影象讓影象都測量出來等於或小於 ImageView 的邊界範圍。該影象將會完全顯示,但可能不會填滿整個 ImageView。

關於Glide就先介紹到這麼多了,一般的常用開發應該夠用了,謝謝大家!喜歡點個贊吧!