Glide入門(mén)教程——9. 縮略圖

Glide — 縮略圖

原文:Thumbnails
作者:Norman Peitek
翻譯:Dexter0218

上篇博客,我們已經(jīng)學(xué)習(xí)了如何在加載和顯示圖片時(shí)候優(yōu)化用戶(hù)體驗(yàn)。緩存和優(yōu)先級(jí)處理大大提升了用戶(hù)體驗(yàn)的流暢性。然而,如果圖片相當(dāng)大,會(huì)花費(fèi)很長(zhǎng)時(shí)間才能圖片完全加載。這篇文章,我們將介紹另一個(gè)優(yōu)化方法:縮略圖。

Glide 系列概覽

  1. 入門(mén)簡(jiǎn)介
  2. 高級(jí)加載
  3. 適配器(ListView, GridView)
  4. 占位圖& 淡入淡出動(dòng)畫(huà)
  5. 圖片大小 & 縮放
  6. 播放GIF & 視頻
  7. 緩存基礎(chǔ)
  8. 請(qǐng)求優(yōu)先級(jí)
  9. 縮略圖
  10. 回調(diào):定制view中使用SimpleTarget和ViewTarget
  11. 通知欄和桌面小控件的圖片加載
  12. 異常: 調(diào)試和報(bào)錯(cuò)處理
  13. 自定義變換
  14. 用animate()定制動(dòng)畫(huà)
  15. 整合網(wǎng)絡(luò)協(xié)議棧
  16. 用Modules定制Glide
  17. Glide Module 案例: 接受自簽名HTTPS證書(shū)
  18. Glide Module 案例: 自定義緩存
  19. Glide Module 案例: 通過(guò)加載自定義大小圖片優(yōu)化
  20. 動(dòng)態(tài)使用 Model Loaders
  21. 如何旋轉(zhuǎn)圖片
  22. 系列綜述

縮略圖的優(yōu)點(diǎn)

在使用縮略圖進(jìn)行優(yōu)化之前,確保你已經(jīng)明白了之前介紹的緩存和請(qǐng)求優(yōu)先級(jí)。如果你已經(jīng)嘗試了之前介紹的所有方法,現(xiàn)在來(lái)看看縮略圖能否幫助你進(jìn)一步提升你的app。

縮略圖不同于前面文章中提到的占位圖。占位圖應(yīng)當(dāng)是跟app綁定在一起的資源??s略圖是一個(gè)動(dòng)態(tài)的占位圖,可以從網(wǎng)絡(luò)加載??s略圖也會(huì)被先加載,直到實(shí)際圖片請(qǐng)求加載完畢。如果因?yàn)槟承┰?,縮略圖獲得的時(shí)間晚于原始圖片,它并不會(huì)替代原始圖片,而是簡(jiǎn)單地被忽略掉。

提示:另外一個(gè)非常棒的平滑圖片顯示的方法,通過(guò)加載圖片主色調(diào)的占位圖。我們也會(huì)為那個(gè)寫(xiě)一篇介紹。

簡(jiǎn)單的縮略圖

Glide提供了2個(gè)不同的方法產(chǎn)生縮略圖。第一種,是通過(guò)在加載的時(shí)候指定一個(gè)小的分辨率,產(chǎn)生一個(gè)縮略圖。這個(gè)方法在ListView和詳細(xì)視圖的組合中非常有用。如果你已經(jīng)在ListView中用到了250x250像素的圖片,那么在在詳細(xì)視圖中會(huì)需要一個(gè)更大分辨率的圖片。然而從用戶(hù)的角度,我們已經(jīng)看見(jiàn)了一個(gè)小版本的圖片,為什么需要好幾秒,同樣的圖片(高分辨率的)才能被再次加載出來(lái)呢?

在這種情況下,從顯示250x250像素版本的圖片平滑過(guò)渡到詳細(xì)視圖里查看大圖更有意義。Glide里的.thumbnail()方法讓這個(gè)變?yōu)榭赡堋_@里,.thumbnal()的參數(shù)是一個(gè)浮點(diǎn)乘法運(yùn)算:

Glide  
    .with( context )
    .load( UsageExampleGifAndVideos.gifUrl )
    .thumbnail( 0.1f )
    .into( imageView2 );

例如,如果你傳遞一個(gè)0.1f作為參數(shù),Glide會(huì)加載原始圖片大小的10%的圖片。如果原始圖片有1000x1000像素,縮略圖的分辨率為100x100像素。由于圖片將會(huì)比ImageView小,你需要確保縮放類(lèi)型是否正確。

注意到你所有的請(qǐng)求設(shè)置都會(huì)影響到你的縮略圖。例如,如果你使用了一個(gè)變換讓你的圖片變?yōu)榛叶葓D,縮略圖也同樣將會(huì)是灰度圖。

高級(jí)縮略圖請(qǐng)求:原圖與縮略圖完全不同

為.thumbnail()傳入一個(gè)浮點(diǎn)類(lèi)型的參數(shù),非常簡(jiǎn)單有效,但并不是總是有意義。如果縮略圖需要從網(wǎng)絡(luò)加載同樣全分辨率圖片,可能根本都不快。這樣,Glide提供了另一個(gè)方法去加載和顯示縮略圖。

第二個(gè)方法是傳遞一個(gè)新的Glide請(qǐng)求作為參數(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 a parameter to the thumbnail request
    Glide
        .with( context )
        .load( UsageExampleGifAndVideos.gifUrl )
        .thumbnail( thumbnailRequest )
        .into( imageView3 );
}

區(qū)別在于第一個(gè)縮略圖請(qǐng)求是完全獨(dú)立于第二個(gè)原始請(qǐng)求的??s略圖可以來(lái)自不同資源或者圖片URL,你可以在它上面應(yīng)用不同的變換。

提示:如果你夠瘋狂,你可以遞歸這樣的操作,為你的縮略圖添加額外的縮略圖請(qǐng)求...

展望

這篇文章展示了Glide用2個(gè)不同的方法加載縮略圖,不要忘了為你的app添加這個(gè)方法!這會(huì)極大減少你的app清空ImageView的次數(shù)。如果你有問(wèn)題,在評(píng)論中提出。

后面我們將介紹展示圖片的目標(biāo)不是ImageView的加載圖片方法,敬請(qǐng)期待!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 零、前言 本文所使用的Glide版本為3.7.0如果需要使用V4的最新版本請(qǐng)參考Glide V4使用指南 一、簡(jiǎn)介...
    MrTrying閱讀 204,626評(píng)論 36 255
  • 在一個(gè) Gradle 項(xiàng)目中在你的 build.gradle中添加下面這行代碼: 從一個(gè) URL 中加載圖片就像 ...
    A_Coder閱讀 2,127評(píng)論 0 4
  • 花香只待月,春意且隨風(fēng)。入海魚(yú)難返,開(kāi)云鳥(niǎo)不驚。水淺清流緩,山高霧氣輕。雨來(lái)新草色,樹(shù)下夜三更。
    文山鹿閱讀 382評(píng)論 30 26
  • 云在飄
    粗嗓門(mén)閱讀 193評(píng)論 0 0

友情鏈接更多精彩內(nèi)容