鍍金池/ 教程/ Android/ 過渡效果
配置
Generated API
轉(zhuǎn)換
選項(xiàng)
過渡效果
關(guān)于Glide
緩存
調(diào)試
目標(biāo)
占位符
下載和設(shè)置
入門指南

過渡效果

Glide中的過渡效果可以讓您定義Glide應(yīng)該怎樣從占位符過渡到新加載的圖像或者從縮略圖過渡到全尺寸的圖像。過渡效果以單個(gè)請(qǐng)求的上下文的方式生效,不是跨多個(gè)請(qǐng)求。因此,過渡效果不允許您定義從一個(gè)請(qǐng)求到另一個(gè)請(qǐng)求的動(dòng)畫(如:淡入淡出)。

默認(rèn)行為

圖像可以從Glide的四個(gè)地方加載:

  1. Glide的內(nèi)存緩存
  2. Glide的磁盤緩存
  3. 本地設(shè)備可用的資源文件或者URI
  4. 遠(yuǎn)程可用的資源URL

如果從Glide的內(nèi)存緩存中加載資源,則沒有默認(rèn)的過渡效果。然而,如果從Glide的磁盤緩存,本地資源文件,URI或者遠(yuǎn)程的資源URL或URI中加載數(shù)據(jù),則Glide的默認(rèn)過渡效果會(huì)生效。

想要改變默認(rèn)的過渡效果的行為,您可以查看下面自定義過渡效果小節(jié)。

指定過渡效果

有關(guān)概述和代碼示例,查看選項(xiàng)文檔。

過渡選項(xiàng)用于指定特定請(qǐng)求的過渡效果。過渡選項(xiàng)使用RequestBuilder中的transition()方法來為請(qǐng)求設(shè)置。特定類型的過渡效果可以使用BitmapTransitionOption或則DrawableTransitionOption指定。對(duì)于Bitmap和Drawable外的其他類型,可以使用GenericTransitionOption。

性能技巧

Android中的動(dòng)畫是昂貴的,特別是如果有大量的動(dòng)畫同時(shí)啟動(dòng)。淡入淡出和涉及透明度變化的動(dòng)畫特別昂貴。另外,動(dòng)畫通常比圖像解碼花費(fèi)更多的時(shí)間。在列表和表格中無償?shù)氖褂脛?dòng)畫使圖像加載感覺緩慢。為了最大限度的提高性能,請(qǐng)考慮在使用Glide加載圖像到ListView,GridView或者RecyclerView時(shí),避免使用動(dòng)畫。特別是當(dāng)您期望圖像緩存或者在大部分時(shí)間盡可能快的加載時(shí),請(qǐng)考慮預(yù)加載這樣在用戶滾動(dòng)到它們時(shí),圖像剛好在內(nèi)存中。

常見錯(cuò)誤

使用占位符淡入淡出和透明圖像

Glide默認(rèn)淡入淡出動(dòng)畫利用TransitionDrawable。TransitionDrawable提供兩種動(dòng)畫模式,由setCrossFadeEnabled()控制。當(dāng)?shù)氲鼋脮r(shí),圖像從已經(jīng)顯示圖像的頂部淡入。當(dāng)?shù)氲鰡⒂脮r(shí),圖像是從不透明過渡到透明的動(dòng)畫淡出,從透明到不透明的動(dòng)畫淡入。

在Glide中,我們默認(rèn)禁用淡入淡出,因?yàn)樗ǔL峁┝烁每吹膭?dòng)畫。一個(gè)實(shí)際的淡入淡出,其中兩個(gè)圖像的透明度都經(jīng)常變化,通常會(huì)在動(dòng)畫中間產(chǎn)生一個(gè)白色的閃光,其中兩個(gè)圖像都是部分不透明的。

不幸的是,禁用淡入淡出通常是更好的默認(rèn)值。它也會(huì)導(dǎo)致一些問題,當(dāng)圖像加載的內(nèi)容包含透明像素,當(dāng)占位符比正在加載的圖像大或者圖像是部分透明的,禁用淡入淡出導(dǎo)致占位符在動(dòng)畫結(jié)束之后在圖像后面可見。如果您占位符加載的透明的圖像,您可以啟動(dòng)淡入淡出通過配置DrawableCrossFadeFactory的參數(shù)適配并且將結(jié)果傳遞給transition()。

跨請(qǐng)求淡入淡出

過渡效果不可以在兩個(gè)不同請(qǐng)求加載的圖像之間淡入淡出。Glide默認(rèn)會(huì)取消任何已存在的請(qǐng)求,當(dāng)您開啟一個(gè)新的負(fù)載在已存在的視圖或目標(biāo)(查看目標(biāo)文檔)。因此,如果您想要加載兩個(gè)不同的圖像并在他們之間淡入淡出,您不能直接在Glide這樣做。策略就像等待第一個(gè)負(fù)載完成, 從視圖中抓取Bitmap或Drawable,啟動(dòng)第二個(gè)負(fù)載,然后在Drawable或Bitmap和新的圖像之間手動(dòng)動(dòng)畫,但這樣是不安全的,并且可能導(dǎo)致崩潰或圖像損壞。

相反地,在兩個(gè)不同的請(qǐng)求中加載的兩個(gè)不同的圖像之間最簡單的淡入淡出方式是使用ViewSwitcher包含兩個(gè)ImageView。將第一張圖像加載到getNextView()的結(jié)果中,接著加載第二張圖像到getNextView()的下一個(gè)結(jié)果中,當(dāng)?shù)诙垐D像加載完成時(shí),使用RequestListener調(diào)用showNext()。為了更好的控制,您可以遵從開發(fā)者文檔中的概述的策略。當(dāng)使用ViewSwitcher時(shí),只有當(dāng)?shù)诙垐D像加載完成之后才淡入淡出。

自定義過渡效果

自定義過渡效果:

  1. 實(shí)現(xiàn)TransitionFactory
  2. 通過DrawableTransitionOption#with應(yīng)用自定義的TransitionFactory加載。

要更改過渡效果的默認(rèn)行為,以便您可以控制從內(nèi)存緩存,磁盤緩存或者從源代碼加載圖像時(shí)是否應(yīng)用該效果,您應(yīng)該檢查在TransitionFactory傳遞給build()方法的數(shù)據(jù)源。

示例,請(qǐng)查看DrawableCrossFadeFactory

上一篇:緩存