Glide中轉(zhuǎn)換接收資源并將其轉(zhuǎn)換,返回轉(zhuǎn)換后的資源。通常,轉(zhuǎn)換用于裁剪或者對(duì)Bitmap應(yīng)用過(guò)濾,但也可以用來(lái)轉(zhuǎn)換Gif動(dòng)畫,甚至自定義資源類型。
Glide中包含了一些內(nèi)置的轉(zhuǎn)換,包括:
使用RequestOption類應(yīng)用轉(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è)面。
默認(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)換的次序。
轉(zhuǎn)換是無(wú)狀態(tài)的。因此,多重負(fù)載中重用轉(zhuǎn)換實(shí)例應(yīng)該總是安全的。通常情況下,一次創(chuà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)換。