Glide 入門到精通之八——縮圖
縮圖優勢
在你要用縮圖去做優化之前,確保你理解和掌握了所有快取的選項和請求優先順序。如果你已經實現了這些,再來檢視縮圖是否能幫助更好的提高你的 Android 應用。
縮圖不同於之前部落格提到的佔位符。佔位符必須附帶應用程式捆綁的資源才行。縮圖是動態佔位符。它也可以從網路中載入。縮圖將會在實際請求載入完或者處理完之後才顯示。不管任何原因,在原始影象到達之後,縮圖不會取代原始影象。它只會被抹除。
提示:另外一個很好的流暢載入圖片過程的方式是用色彩影象佔位符的影象背景的主色彩作為影象。我們也為此寫了一個指南。
簡單的縮圖
Glide 為縮圖提供2個不同的方式。
第一個是簡單的選擇,在原始影象被用過之後,這隻需要一個較小的解析度。這個方法在 ListView的組合和詳細檢視中是非常有用的。如果你已經在 ListView 中顯示了影象。
這麼說吧,在縮圖中畫素是250x250,影象將在詳細檢視中需要一個更大的解析度影象。然而,從使用者的角度來看,他已經看到縮圖,為什麼在詳情頁中出現一個佔位符顯示了幾秒,然後相同影象又再次一次顯示(高解析度的)?
繼續顯示這張 250x250 畫素版本的影象在詳情檢視上,並且後臺去載入全解析度的影象,這樣可以先看到一個不清晰的影象,等載入完成後,看到。
Glide 的 .thumbnail() 方法讓這一切成為可能。 在這樣的情況下,這個引數是一個 float 作為其大小的倍數。
Glide
.with( context )
.load( UsageExampleGifAndVideos.gifUrl )
.thumbnail( 0.1f )
.into( imageView2 );
例如, 你傳了一個 0.1f 作為引數,Glide 將會顯示原始影象的10%的大小。如果原始影象有 1000x1000 畫素,那麼縮圖將會有 100x100 畫素。因為這個影象將會明顯比 ImageView 小很多,你需要確保它的 ScaleType 的設定是正確的。
請注意,將應用於演示請求的所有請求設定也應用於縮圖。比如,如果你使用了一個變換去做了一個影象灰度。這同樣將發生在縮圖中。
縮圖進階——用完全不同的請求
然而用 float 引數來使用 .thumbnail() 是易於設定且非常有效,但它不總是有意義的。如果縮圖是要通過網路去載入相同的全解析度的影象,則可能不會很快。所以,Glide 提供了另一個選項去載入和顯示縮圖。
第二個選擇是傳一個完全新的 Glide 請求作為引數。讓我們來看看例項:
private void loadImageThumbnailRequest() {
// setup Glide request without the into() method
DrawableRequestBuilder<String> thumbnailRequest = Glide
.with( context )
.load( eatFoodyImages[2] );
// pass the request as a a parameter to the thumbnail request
Glide
.with( context )
.load( UsageExampleGifAndVideos.gifUrl )
.thumbnail( thumbnailRequest )
.into( imageView3 );
}
所不同的是,第一個縮圖請求是完全獨立於第二個原始請求的。該縮圖可以是不同的資源或圖片 URL,你可以為其應用不同的轉換,等等。
提示,如果你想要更加瘋狂,你可以遞歸併應用一個額外的縮圖請求去請求縮圖。
Outlook
這篇部落格為你展示兩種不同的方法用 Glide 去為影象載入縮圖。做應用優化的時候不要忘記這個選項!它可以在你的應用中明顯的幫你減少空的 ImageView 時間。
下一篇:我們將看看用 Glide 做圖片載入,但目標不是一個 ImageView
關注我的公眾號,輕鬆瞭解和學習更多技術