Glide(一 4.8.0版本)

Glide 4.8.0版本

1.簡介:圖片加載框架

https://mvnrepository.com/artifact/com.github.bumptech.glide/glide
我沒咋看懂這個代碼。。。可算找到老家了,所有的版本都在上面。

2.使用

(1)首先在app/build.gradle文件裏添加依賴

dependencies {
    implementation 'com.github.bumptech.glide:glide:4.8.0'
}

glide:4.8.0是版本號,要根據最新版本來配置,過期的版本會報出一堆警告,而且加載速度賊慢,光標點過去有提示信息的,可以修改到對應版本就好了

(2)Glide中需要用到網絡功能,因此你還得在AndroidManifest.xml中聲明一下網絡權限纔行:

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

(3)接下來就可以加載圖片了,在佈局文件中定義一個button,用來相應點擊事件,一個ImageView用來顯示圖片,然後再MainActivity 中修改如下:找到ImageView的id,然後從網上加載圖片。

public class MainActivity extends AppCompatActivity {
     private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.image);
    }
    protected void loadImage(View view){
        String url="https://i.loli.net/2018/10/25/5bd12ccaf2996.jpg";
        Glide.with(this).load(url).into(imageView);
    }
}

這裏推薦一個把本地圖片上傳到網上的圖片處理網站 sm.ms,它現在在升級,頁面要把我醜哭了
1540689468927.png

可以Browse打開電腦文件,然後點Upload,在下面可以選擇不同的格式的鏈接。一般選擇Markdown with Link格式就可以在在csdn上直接顯示圖片。

這個程序運行效果如下
1540689668871.png

還是很成功的。

還有就是 protected void loadImage(View view)這一句,這個loadImage不是系統定義好的方法,而是我自定義的。可以在Button控件的佈局文件中添加這句android:onClick=“loadImage”,這樣就可以通過這個方式創造這個按鈕的點擊事件了。比較簡便,但代碼維護的時候可能會找不到。所以也可以用監聽器的方式來實現。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.image);
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    public void onClick(View v){
        switch (v.getId()){
            case R.id.button:
            { String url="https://i.loli.net/2018/10/25/5bd12ccaf2996.jpg";
                Glide.with(this).load(url).into(imageView);}
                break;
            default:break;
        }

詳見按鈕使用方法https://www.jianshu.com/p/f32b79670ec9

核心的代碼:

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

這個代碼可以包括加載網絡上的圖片、加載手機本地的圖片、加載應用資源中的圖片等等。

下面我們就來詳細解析一下這行代碼。

首先,調用Glide.with()方法用於創建一個加載圖片的實例。with()方法可以接收Context、Activity或者Fragment類型的參數。也就是說我們選擇的範圍非常廣,不管是在Activity還是Fragment中調用with()方法,都可以直接傳this。那如果調用的地方既不在Activity中也不在Fragment中呢?也沒關係,我們可以獲取當前應用程序的ApplicationContext,傳入到with()方法當中。注意with()方法中傳入的實例會決定Glide加載圖片的生命週期,如果傳入的是Activity或者Fragment的實例,那麼當這個Activity或Fragment被銷燬的時候,圖片加載也會停止。如果傳入的是ApplicationContext,那麼只有當應用程序被殺掉的時候,圖片加載纔會停止。

接下來看一下load()方法,這個方法用於指定待加載的圖片資源。Glide支持加載各種各樣的圖片資源,包括網絡圖片、本地圖片、應用資源、二進制流、Uri對象等等。因此load()方法也有很多個方法重載,除了我們剛纔使用的加載一個字符串網址之外,你還可以這樣使用load()方法:

// 加載本地圖片
File file = getImagePath();
Glide.with(this).load(file).into(imageView);

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

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

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

最後看一下into()方法,這個方法就很簡單了,我們希望讓圖片顯示在哪個ImageView上,把這個ImageView的實例傳進去就可以了。當然,into()方法不僅僅是隻能接收ImageView類型的參數,還支持很多更豐富的用法,不過那個屬於高級技巧,我們會在後面的文章當中學習。

那麼回顧一下Glide最基本的使用方式,其實就是關鍵的三步走:先with(),再load(),最後into()。熟記這三步,你就已經入門Glide了。

3.其他技巧

(1)佔位圖

就是真正要加載的圖片可能比較大,加載速度會慢一些,這是先顯示佔位圖,加載完再顯示真正的圖片。所以佔位圖肯定比真正的圖片要小,算是一種提升用戶體驗的辦法吧。

下面我們就來學習一下Glide佔位圖功能的使用方法,首先我事先準備好了一張loading.jpg圖片,用來作爲佔位圖顯示。然後修改Glide加載部分的代碼,如下所示:

RequestOptions options = new RequestOptions()
            .placeholder(R.mipmap.ic_launcher_round)
            .diskCacheStrategy(DiskCacheStrategy.NONE);
    String url="https://i.loli.net/2018/10/25/5bd12ccaf2996.jpg";
    Glide.with(this)
            .load(url)
            .apply(options)
            .into(imageView);
}

沒錯,就是這麼簡單。我們只是在剛纔的三步走之間插入了一個apply()方法,然後將佔位圖片的資源id傳入到這個方法中即可。另外,這個佔位圖的用法其實也演示了Glide當中絕大多數API的用法,其實就是在load()和into()方法之間串接任意想添加的功能就可以了。

Glide 4.0後用RequestOptions進行配置,一次配置全適用了

RequestOptions

包括以下方法:

centerCrop()
placeholder() 佔位圖
error() 加載異常顯示的圖片
priority()
diskCacheStrategy()。傳入DiskCacheStrategy.NONE參數,這樣就可以禁用掉Glide的緩存功能。

大多數的設置已經放到了RequestOptions對象中:

 RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.diskCacheStrategy(DiskCacheStrategy.NONE);

然後用apply()方法,傳入參數爲options,就可以用了,裏面的屬性可以根據需要進行選擇

詳見 https://juejin.im/entry/5924f28eda2f60005d7725b2

(2)指定圖片格式

我們還需要再瞭解一下Glide另外一個強大的功能,那就是Glide是支持加載GIF圖片的。而Picasso是不會支持加載GIF圖片的。而使用Glide加載GIF圖並不需要編寫什麼額外的代碼,Glide內部會自動判斷圖片格式。怎麼指定,我先研究一下。

(3)指定圖片大小

什麼叫內存浪費呢?比如說一張圖片的尺寸是10001000像素,但是我們界面上的ImageView可能只有200200像素,這個時候如果你不對圖片進行任何壓縮就直接讀取到內存中,這就屬於內存浪費了,因爲程序中根本就用不到這麼高像素的圖片。

而使用Glide,我們就完全不用擔心圖片內存浪費,甚至是內存溢出的問題。因爲Glide從來都不會直接將圖片的完整尺寸全部加載到內存中,而是用多少加載多少,Glide會自動根據ImageView的大小來決定圖片的大小。。Glide會自動判斷ImageView的大小,然後只將這麼大的圖片像素加載到內存當中,幫助我們節省內存開支。

不過,如果你想給圖片指定一個固定的大小,Glide仍然是支持這個功能的。修改Glide加載部分的代碼,如下所示:

RequestOptions options = new RequestOptions()
        .placeholder(R.mipmap.ic_launcher_round)
        .error(R.mipmap.ic_launcher)
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .override(500,500);

這個override就可以設置大小了,我試了一下果然圖片模糊了不少,感覺我整個臉都好看了,這就是美顏相機的原理吧,哈哈哈。

我是小菜鳥,暫時我只是大神推送的搬運升級工,轉載自郭霖的博客。

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