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,它現在在升級,頁面要把我醜哭了
可以Browse打開電腦文件,然後點Upload,在下面可以選擇不同的格式的鏈接。一般選擇Markdown with Link格式就可以在在csdn上直接顯示圖片。
還是很成功的。
還有就是 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就可以設置大小了,我試了一下果然圖片模糊了不少,感覺我整個臉都好看了,這就是美顏相機的原理吧,哈哈哈。
我是小菜鳥,暫時我只是大神推送的搬運升級工,轉載自郭霖的博客。