為什么要學Glide圖片加載框架。Glide是Google官方推薦的圖片加載框架。
1.Glide使用前的配置
1.1配置依賴
Android studio 的配置:
app/build.gradle文件當中添加如下依賴:
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
Eclipse的配置
jar包的地址:
http://central.maven.org/maven2/com/github/bumptech/glide/glide/3.7.0/glide-3.7.0.jar
1.2 設置網(wǎng)絡權限
在AndroidManifest.xml中聲明一下網(wǎng)絡權限才行:
<uses-permission android:name="android.permission.INTERNET" />
2.加載圖片--最基本的使用方式
2.1 最基本的使用
public void loadImageGlide(View view) {
String url = "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
Glide.with(this).load(url).into(imageView);
}
效果如下:

實際上核心的代碼就只有這一行而已:
Glide.with(this).load(url).into(imageView);
2.1 Glide.with(this).load(url).into(imageView)的解析
2.1.1 with()方法 --> 控制生命周期
Glide.with()方法的創(chuàng)建一個加載圖片的實例。with()方法的參數(shù)可以接收,Context,Activity或者Fragment類型的參數(shù)。
注意:with()方法傳不同類型的參數(shù)決定了Glide加載圖片的生命周期。當傳入是Activity或者Fragment的實例,那么當這個Activity或者Fragment銷毀的時候,Glide圖片加載也會停止。
2.1.2 load()方法 --> 從哪里來
這個方法用于指定要加載的圖片的內(nèi)容。
除了加載Uri圖片外,Glide還支持
// 加載本地圖片
File file = new File(getExternalCacheDir() + "/image.jpg");
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(uri).load(image).into(imageView);
2.1.3 into()方法 --> 到哪里去
要把圖片顯示到哪里。顯示到ImageViewd上,就傳入ImageView的實例就可以了。
當然into方法不僅僅只能接受ImageView類型的參數(shù),還支持很多跟豐富的用法,那些屬于高級技巧,以后有時間會再講。
2.2 總結(jié)
總結(jié):Glide最基本的使用方式,就三步,1.先with() 設置圖片加載的生命周期,2再load() 圖片資源從哪里來,3.最后into()把圖放哪里。掌握這三步,你就是算已經(jīng)入門Glide了。
3. 占位符
前提:從網(wǎng)絡加載圖片,圖片有可能不能立馬顯示出來,給用戶一個空白,影響用戶體驗。應該顯示一張加載中的臨時圖,等圖片加載完成,就替代臨時圖,來提高用戶體驗。
3.1設置加載中占位圖
在load()和into() 之間加入placeholder()方法,然后將占位圖片的資源id傳入到這個方法中即可。
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.into(imageView);
但是你現(xiàn)在點加載方法,很可能看不到占位符。因為Glide有非常強大的緩沖機制,會自動緩沖加載過的圖片。下載加載會直接從緩沖中讀取,而不會再去網(wǎng)絡去下載,因此加載的速度非???,所以展位圖可能根本來不及顯示。
為了看得到占位圖,禁止Glide的緩沖功能。
禁止Glide的緩沖功能。
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.diskCacheStrategy(DiskCacheStrategy.NONE)//禁用掉Glide的緩存功能
.into(imageView);
效果如下:

其實Glide當中絕大多數(shù)API的用法,其實就是在load()和into()方法之間串接任意想添加的功能就可以了。
3.2 設置異常占位圖
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)//設置異常占位符
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
4 指定圖片格式
Glide支持顯示gif圖。
4.1 設置gif動態(tài)圖
String url = "http://s1.dwstatic.com/group1/M00/C3/AC/4a5697ed8f6b73be31fa8e4c8d445370.gif";
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(ImageView);
其實就是把uri改成gif圖的資源就行了。Glide內(nèi)部會自動判斷圖片的格式
效果圖如下:

想指定圖片的格式怎么辦?
4.1 指定加載的圖片僅為靜態(tài)圖片
Glide.with(this)
.load(url)
.asBitmap()//設置只允許加載靜態(tài)圖片,如果uri是gif就顯示第一幀的圖片。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
效果如下:

4.3 指定加載的圖片僅為gif動態(tài)圖片
Glide.with(this)
.load(url)
.asGif()//設置只允許加載gif圖片,如果uri是靜態(tài)圖片就顯示error的占位圖。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
效果如下:

指定圖片大小
實際上,使用Glide在絕大多數(shù)情況我們都是不需要指定圖片的大小的。
概念:就是我們平時在加載圖片的時候很容易會造成內(nèi)存浪費。什么叫內(nèi)存浪費呢?比如說一張圖片的尺寸是10001000像素,但是我們界面上的ImageView可能只有200200像素,這個時候如果你不對圖片進行任何壓縮就直接讀取到內(nèi)存中,這就屬于內(nèi)存浪費了,因為程序中根本就用不到這么高像素的圖片
而使用Glide,我們完全不需要擔心圖片內(nèi)存浪費。因為Glide會自動判斷ImageView控件的大小,然后對圖片進行壓縮,再顯示到ImageView上的。
硬要設置圖片的大小也是可以的。
設置圖片的大小實現(xiàn)
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(100, 100)//將圖片加載成100*100像素的尺寸
.into(imageView);
效果如下:

參考博客:
http://blog.csdn.net/guolin_blog/article/details/53759439?utm_source=tuicool&utm_medium=referral