寫在前面:這篇文章原著是Norman Peitek,所有著作權(quán)歸原作者所有埠况,我只是在學(xué)習(xí)Glide的時候看到有間書的作者 weiyf 寫了雙語的翻譯锨侯,覺得非常好勿锅,但是作者只寫了幾篇婿屹,估計是比較忙吧弟塞。于是我就去看原博了,發(fā)現(xiàn)原博的英文也不會很難懂我抠,這里只是方便學(xué)習(xí)做了翻譯(順便學(xué)英語(逃)苇本,建議英文基礎(chǔ)還可以的同學(xué)直接看原文:https://futurestud.io/tutorials/glide-thumbnails
前幾篇傳送門:
- 【雙語】Glide — 入門(Glide — Getting Started)
- 【雙語】Glide — 高級加載(Glide — Advanced Loading)
- 【雙語】Glide — 列表適配器(ListView, GridView)(Glide — ListAdapter (ListView, GridView))
- Glide-默認(rèn)圖與過渡動畫(Placeholders & Fade Animations)
- Glide-圖片縮放、調(diào)整(Image Resizing & Scaling)
- Glide-顯示Gif和視頻(Displaying Gifs & Videos)
- Glide-緩存基礎(chǔ)(caching-basics)
- Glide-優(yōu)先請求(glide-request-priorities)
原文傳送門:
- Callbacks: SimpleTarget and ViewTarget for Custom View Classes
- Loading Images into Notifications and AppWidgets
- Exceptions: Debugging and Error Handling
- Custom Transformations
- Custom Animations with animate()
- Integrating Networking Stacks
- Customize Glide with Modules
- Glide Module Example: Accepting Self-Signed HTTPS Certificates
- Glide Module Example: Customize Caching
- Glide Module Example: Optimizing By Loading Images In Custom Sizes
- Dynamically Use Model Loaders
- How to Rotate Images
- Series Roundup
- *Advanced ListViews With Images
- *App Release Preparation
- How to Choose the Best Caching Preference
- How to Ignore URL Query Parameters In Cache Lookup (soon)
- Network-Dependent Image Loading (soon)
正文:
上周菜拓,我們學(xué)習(xí)了一些在加載和顯示圖片的時候提高用戶體驗的方法瓣窄。通過 緩存 和 設(shè)置請求優(yōu)先級 已經(jīng)為流暢的體驗提供了關(guān)鍵的一步了。然而纳鼎,如果你加載的圖片非常大俺夕,那么會花費較長的一段時間直到它顯示出來。在本博文中贱鄙,我們將探索另一個優(yōu)化的途徑:thumbnails(縮略圖劝贸,下文不譯)
Thumbnails的優(yōu)勢
在你使用Thumbnails來優(yōu)化之前,先確保你已經(jīng)理解并充分利用了 緩存和優(yōu)先請求逗宁。如果所有的努力都已經(jīng)做了映九,那么試試Thumbnails是否能提升你的Android應(yīng)用。
Thumbnails跟我們之前講的占位符還不太一樣瞎颗,占位符在app里面是指定好的某些資源文件件甥。Thumbnails的話則是一個動態(tài)的占位符,它也可以從網(wǎng)絡(luò)上加載得來哼拔。
Thumbnails會在實際的請求和處理之前顯示出來引有,不管什么原因,如果Thumbnails在原圖加載后才出現(xiàn)倦逐,它會自動消失而不會替換原圖譬正。
提示:為了更加時更加流暢,另一個非常好的方式是用一種顏色來替換占位符的背景色檬姥,這個顏色是從目標(biāo)圖里提取出來的曾我,可以看看我們寫的一個文檔。
ps:以下是我從作者提到的文檔里面摳出來的圖穿铆,來感受一下:
Simple Thumbnails:簡單縮略圖
Glide提供了兩種不同的縮略圖您单。第一種比較簡單,就是在加載原圖的時候顯示一張更小尺寸的圖片荞雏。這種方式尤其適用于ListView和詳情頁面的組合當(dāng)中虐秦。 如果你早已經(jīng)在ListView中加載了圖片平酿,就像我們剛才假設(shè)的,250x250像素的圖片悦陋,在進(jìn)入其詳情頁面的時候蜈彼,需要一張更大尺寸的圖。然而俺驶,對于用戶而言幸逆。他們早早就已經(jīng)看到一張圖片(小圖)了,為什么還會出現(xiàn)先顯示占位符暮现,過了幾秒后顯示大圖的情況还绘?
對于這種情況,我們更應(yīng)該在詳情頁面繼續(xù)顯示那張250x250的圖片栖袋,然后在后臺加載所需要的大圖拍顷。Glide使用.thumbnail()
就可以做到,這是傳入的參數(shù)是一個浮點數(shù)塘幅,它代表尺寸的倍數(shù)昔案。
Glide
.with( context )
.load( UsageExampleGifAndVideos.gifUrl )
.thumbnail( 0.1f )
.into( imageView2 );
例如,你傳了0.1f作為參數(shù)电媳,那么Glide則會顯示原圖大小的10%踏揣。如果原圖的尺寸是1000x1000像素,那么縮略圖就是100x100像素匾乓。由于縮略圖會比ImageView要小許多捞稿,所以你要確保一個準(zhǔn)確的縮放比例。
說明一下钝尸,所有圖片請求的設(shè)置同樣適用于縮略圖括享。例如,你請求某張圖片時做了一個灰度變換珍促,那么對于它的縮略圖也是同樣會生效的。
Advanced Thumbnails with Complete Different Requests 高級縮略圖剩愧,通過完成不一樣的請求
雖然使用.thumbnail()
傳入一個浮點數(shù)非常簡單高效猪叙,但不是所有情況都使用。如果縮略圖也需要從網(wǎng)絡(luò)加載各種尺寸仁卷,那么它可能也快不了多少穴翩。因此,Glide提供了另一種加載縮略圖的方法锦积。
第二種方式就是傳入一個新的圖片請求作為參數(shù),我們來看看例子:
private void loadImageThumbnailRequest() {
// setup Glide request without the into() method
DrawableRequestBuilder<String> thumbnailRequest = Glide
.with( context )
.load( eatFoodyImages[2] );
// pass the request as a parameter to the thumbnail request
Glide
.with( context )
.load( UsageExampleGifAndVideos.gifUrl )
.thumbnail( thumbnailRequest )
.into( imageView3 );
}
區(qū)別在于第一個圖片請求與第二個圖片請求是完全獨立的芒帕,縮略圖可以是其他不同的資源id或者圖片鏈接,你可以對它做一些變換等等丰介。
提示:如果你想更帶勁一點背蟆,你可以遞歸地調(diào)用一些請求作為圖片的縮略圖請求參數(shù)
Outlook: 展望
本文介紹了Glide兩種加載縮略圖的方式鉴分,不要忘記在你的優(yōu)雅的app上使用哦!它能極大地減少空白的ImageView出現(xiàn)在你的app上带膀。如果你有什么疑問志珍,請通過評論讓我們知道!
下周垛叨,我們將學(xué)習(xí)如何在不是ImageView的控件上顯示圖片伦糯,敬請關(guān)注!