Glide試講

導(dǎo)入

  • 我們每開發(fā)一個APP,基本都是顯示文字與展示圖片,圖片加載肯定不需要大家自己封裝,市場流行的圖片加載框架有Glide、Picasso、Fresco,每個框架都很優(yōu)秀,但是合不合腳只有我們自己知道,我比較喜歡用Glide。我們今天課程的主要內(nèi)容是glide的學(xué)習(xí),課程結(jié)束后大家會掌握隨意處理圖片了,比如模糊、圓角、黑白、大小等。

一.簡介

  • Glide(讀音糾正),一個被google所推薦的圖片加載庫,作者是bumptech。這個庫被廣泛運(yùn)用在google的開源項目中,包括2014年的google I/O大會上發(fā)布的官方app。(PS:眾所周知的簡介就到此為止了)

  • Glide 對于 Android SDK 的最低要求是 API level 10

  • Glide滑行的意思,可以看出這個庫的主旨就在于讓圖片加載變的流暢?,F(xiàn)在被廣泛使用,當(dāng)然還是有很多開發(fā)者使用Square公司的picasso.

二.使用

添加依賴:

implementation 'com.github.bumptech.glide:glide:3.8.0'

添加網(wǎng)絡(luò)權(quán)限:

<uses-permission android:name="android.permission.INTERNET"/>

1、加載圖片到imageView

Glide.with(Context context).load(Strint url).into(ImageView imageView);

2、各種形式的圖片加載到ImageView

// 加載本地圖片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);

// 加載應(yīng)用資源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);

// 加載二進(jìn)制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);

// 加載Uri對象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

3、加載帶有占位圖

Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);

占位圖目的為在目的圖片還未加載出來的時候,提前展示給用戶的一張圖片;

4、加載失敗 放置占位符

Glide.with(this).load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)//關(guān)閉Glide的硬盤緩存機(jī)制
.into(imageView);

//DiskCacheStrategy.NONE: 表示不緩存任何內(nèi)容。
//DiskCacheStrategy.SOURCE: 表示只緩存原始圖片。
//DiskCacheStrategy.RESULT: 表示只緩存轉(zhuǎn)換過后的圖片(默認(rèn)選項)。
//DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉(zhuǎn)換過后的圖片。

5、加載指定格式的圖片--指定為靜止圖片

Glide.with(this)
 .load(url)
 .asBitmap()//只加載靜態(tài)圖片,如果是gif圖片則只加載第一幀。
 .placeholder(R.drawable.loading)
 .error(R.drawable.error)
 .diskCacheStrategy(DiskCacheStrategy.NONE)
 .into(imageView);

6、加載動態(tài)圖片

Glide.with(this)
.load(url)
.asGif()//加載動態(tài)圖片,若現(xiàn)有圖片為非gif圖片,則直接加載錯誤占位圖。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);

7、加載指定大小的圖片

Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(100, 100)//指定圖片大小
.into(imageView);

8、關(guān)閉框架的內(nèi)存緩存機(jī)制

Glide.with(this)
.load(url)
.skipMemoryCache(true)  //傳入?yún)?shù)為true時,則關(guān)閉內(nèi)存緩存。
.into(imageView);

9、利用Glide將圖片加載到不同控件或加載成不同使用方式

//1、通過自己構(gòu)造 target 可以獲取到圖片實(shí)例
SimpleTarget<GlideDrawable> simpleTarget = new SimpleTarget<GlideDrawable>() {
    @Override
    public void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {
        imageView.setImageDrawable(resource);
    }
};

//2、將圖片實(shí)例記載到指定的imageview上,也可以做其他的事情
public void loadImage(View view) {
    String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";
    Glide.with(this)
         .load(url)
         .into(simpleTarget);
}

10、Glide 實(shí)現(xiàn)預(yù)加載
希望提前對圖片進(jìn)行一個預(yù)加載,等真正需要加載圖片的時候就直接從緩存中讀取,不想再等待慢長的網(wǎng)絡(luò)加載時間

//a、預(yù)加載代碼
Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.SOURCE)
     .preload();

//preload() 有兩種重載
 // 1、帶有參數(shù)的重載,參數(shù)作用是設(shè)置預(yù)加載的圖片大?。?//2、不帶參數(shù)的表示加載的圖片為原始尺寸;

//b、使用預(yù)加載的圖片
Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.SOURCE)
     .into(imageView);

切記:diskCacheStrategy() 方法內(nèi)必須設(shè)置參數(shù)為:“ DiskCacheStrategy.SOURCE ”,否則可能預(yù)加載失敗,導(dǎo)致顯示圖片時,需要重新加載。

11、Glide 實(shí)現(xiàn)圖片下載
使用 downloadOnly(int width, int height) 或 downloadOnly(Y target) 方法替代 into(view) 方法。

private void downImageByGlide() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final FutureTarget<File> fileFutureTarget = Glide.with(MainActivity.this)
                        .load(Constant.imageUrl)
                        .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
                try {
                    final String path = fileFutureTarget.get().getPath();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Glide.with(MainActivity.this)
                                    .load(new File(path))
                                    .into(imageview);
                        }
                    });

                    Log.e("TAG", "path" + path);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

(1)、有兩個參數(shù)的 downloadOnly(int width, int height) 方法表示指定下載尺寸,用于在子線程內(nèi)進(jìn)行下載;
(2)、target.get() 方法可以獲取到下載文件保存路徑,如果未下載ok,方法就會阻塞住,一直等到圖片下載完成才會有值返回;

注意: diskCacheStrategy() 方法的參數(shù)應(yīng)該為 DiskCacheStrategy.SOURCE 或者 DiskCacheStrategy.ALL否則可能導(dǎo)致加載圖片到控件的時候,需要重新加載。

12、監(jiān)聽 Glide 加載的狀態(tài)--它可以用來監(jiān)聽Glide加載圖片的狀態(tài)

public void loadImage(View view) {
    String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";
    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;
                }
            })
            .into(imageView);
}

(1)、onException() 方法表示加載失敗,onResourceReady() 表示加載成功;
(2)、 每個方法都有一個 boolean 的返回值,false表示未處理、true 表示處理。

13、Glide 的圖形變換功能
(1)、禁用圖形變換功能

Glide.with(this)
     .load(url)
     .dontTransform()
     .into(imageView);

這個方法時全局的,導(dǎo)致其他地方的圖片也不可進(jìn)行圖形變換了。

修改方法

Glide.with(this)
     .load(url)
     .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
     .into(imageView);

通過 override() 方法設(shè)置大小

(2)、簡單的圖形變換

Glide.with(this)
     .load(url)
     .centerCrop()
     .into(imageView);

Glide.with(this)
     .load(url)
     .fitCenter()
     .into(imageView);
  • centerCrop()方法 :等比例縮放圖片,直到圖片的寬高都大于等于ImageView的寬度,然后截取中間的顯示
  • fitCenter() 方法: 等比例縮放圖片,寬或者是高等于ImageView的寬或者是高

(3)、override() 方法與 centerCrop() 方法配合使用

String url = "http://cn.bing.com/az/hprichbg/rb/AvalancheCreek_ROW11173354624_1920x1080.jpg";
Glide.with(this)
     .load(url)
     .override(500, 500)
     .centerCrop()
     .into(imageView);

(4)、復(fù)雜的圖像變換
首先需要再引入一個 第三方框架 。

dependencies {
    implementation 'jp.wasabeef:glide-transformations:4.0.0'
    // If you want to use the GPU Filters
    implementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
}

部分樣例:
圖片虛化

Glide.with(this)
     .load(url)
     .bitmapTransform(new BlurTransformation(this))
     .into(imageView);

圖片黑白化

Glide.with(this)
     .load(url)
     .bitmapTransform(new GrayscaleTransformation(this))
     .into(imageView);

多個屬性同時使用

Glide.with(this)
     .load(url)
     .bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this))
     .into(imageView);

還有更多的好玩的屬性,請到框架官網(wǎng)查看:https://github.com/wasabeef/glide-transformations

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫Glide的圖片加載庫,作者是bumptech。這...
    天天大保建閱讀 7,762評論 2 28
  • Glide筆記 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫Glide的圖片加載庫,作者是bu...
    AndroidMaster閱讀 4,089評論 0 27
  • 目前市場上的圖片異步請求框架有很多,比如Volley,Fresco,Glide,Picasso等,之前項目中用的一...
    junjunxx閱讀 1,332評論 1 8
  • 昨夜夢得深沉,回到了老宅。老房子已經(jīng)夷為平地了,阿爸阿媽給我留的那幢二層小樓孤獨(dú)地佇立著,院子里所有的花草樹木都沒...
    木春閱讀 521評論 2 3
  • 時光只有在行進(jìn)的車中才能體會更深 人在時光里穿行的真實(shí)感、渺茫感。。。 每每坐在行駛的車?yán)?,極速而過的車窗外風(fēng)景不...
    f66cbac67a4a閱讀 209評論 0 1

友情鏈接更多精彩內(nèi)容