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

轉(zhuǎn)換

Glide中轉(zhuǎn)換接收資源并將其轉(zhuǎn)換,返回轉(zhuǎn)換后的資源。通常,轉(zhuǎn)換用于裁剪或者對(duì)Bitmap應(yīng)用過(guò)濾,但也可以用來(lái)轉(zhuǎn)換Gif動(dòng)畫,甚至自定義資源類型。

內(nèi)置類型

Glide中包含了一些內(nèi)置的轉(zhuǎn)換,包括:

  • CenterCrop
  • FitCenter
  • CircieCrop

應(yīng)用轉(zhuǎn)換

使用RequestOption類應(yīng)用轉(zhuǎn)換:

默認(rèn)轉(zhuǎn)換

RequestOptions options = new RequestOptions();
options.centerCrop();

Glide.with(fragment)
    .load(url)
    .apply(options)
    .into(imageView);

大多數(shù)內(nèi)置的轉(zhuǎn)換還可以靜態(tài)導(dǎo)入,以便使用靈活的API。例如,您可以使用靜態(tài)方法應(yīng)用FitCenter轉(zhuǎn)換:

import static com.bumptech.glide.request.RequestOptions.fitCenterTransform;

Glide.with(fragment)
    .load(url)
    .apply(fitCenterTransform())
    .into(imageView);

如果您使用生成的API,轉(zhuǎn)換方法是鏈?zhǔn)降?,所以更加容易?/p>

GlideApp.with(fragment)
  .load(url)
  .fitCenter()
  .into(imageView);

有關(guān)使用RequestOption的信息,請(qǐng)查閱選項(xiàng)頁(yè)面。

多重轉(zhuǎn)換

默認(rèn)情況下,對(duì)每一個(gè)后續(xù)調(diào)用transform()或者任何特定對(duì)轉(zhuǎn)換方法(fitCenter(),centerCrop(),bitmapTransform()等等)將替換之前的轉(zhuǎn)換。

為了將多重轉(zhuǎn)換應(yīng)用到單一到負(fù)載,請(qǐng)使用MultiTransformation類。

使用生成的API:

GlideApp.with(fragment)
  .load(url)
  .transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
  .into(imageView);

將轉(zhuǎn)換傳遞給MultiTransformation的構(gòu)造函數(shù)的次序決定了應(yīng)用轉(zhuǎn)換的次序。

Glide中特殊行為

重新使用轉(zhuǎn)換

轉(zhuǎn)換是無(wú)狀態(tài)的。因此,多重負(fù)載中重用轉(zhuǎn)換實(shí)例應(yīng)該總是安全的。通常情況下,一次創(chuàng)建轉(zhuǎn)換,然后將其傳遞給多重加載是好的做法。

ImageView的自動(dòng)轉(zhuǎn)換

在Glide中當(dāng)您開啟加載到ImageView時(shí),Glide可能自動(dòng)應(yīng)用FitCenter或CenterCrop,具體取決于視圖的縮放類型。如果縮放類型是CENTER_CROP,Glide會(huì)自動(dòng)應(yīng)用CenterCrop轉(zhuǎn)換。如果縮放類型是FIT_CENTER或者CENTER_INSIDE,則Glide會(huì)自動(dòng)應(yīng)用FitCenter 轉(zhuǎn)換。

您可以總是通過(guò)應(yīng)用具有轉(zhuǎn)換設(shè)置的請(qǐng)求選項(xiàng)覆寫默認(rèn)的轉(zhuǎn)換。另外,您可以使用dontTransform()確保沒(méi)有自動(dòng)的轉(zhuǎn)換。

自定義資源

因?yàn)镚lide v4.0允許您指定要解碼的資源的超類型。您可能不知道要應(yīng)用哪種轉(zhuǎn)換類型。例如,當(dāng)您使用asDrawable()(或者只是with(),因?yàn)閍sDrawable()是默認(rèn)值)請(qǐng)求Drawable資源時(shí),可能獲取到BitmapDrawable的子類或者GifDrawable的子類。

為了確保您添加的任何轉(zhuǎn)換都能被請(qǐng)求選項(xiàng)應(yīng)用,Glide會(huì)將您提供的資源類到轉(zhuǎn)換的映射添加到transform()方法。資源解碼后,Glide使用映射來(lái)檢索相應(yīng)資源的轉(zhuǎn)換。

Glide可以應(yīng)用Bitmap轉(zhuǎn)換成BitmapDrawable,GifDrawable,以及Bitmap資源,所以通常您只需要編寫以及應(yīng)用Bitmap轉(zhuǎn)換。但是,如果您添加額外的資源類型,您可能需要考慮子類化RequestOption并且總是給您的自定義資源應(yīng)用轉(zhuǎn)換,除了內(nèi)置的Bitmap轉(zhuǎn)換。

上一篇:配置下一篇:Generated API