Glide中轉換接收資源并將其轉換,返回轉換后的資源。通常,轉換用于裁剪或者對Bitmap應用過濾,但也可以用來轉換Gif動畫,甚至自定義資源類型。
Glide中包含了一些內置的轉換,包括:
使用RequestOption類應用轉換:
RequestOptions options = new RequestOptions();
options.centerCrop();
Glide.with(fragment)
.load(url)
.apply(options)
.into(imageView);
大多數(shù)內置的轉換還可以靜態(tài)導入,以便使用靈活的API。例如,您可以使用靜態(tài)方法應用FitCenter轉換:
import static com.bumptech.glide.request.RequestOptions.fitCenterTransform;
Glide.with(fragment)
.load(url)
.apply(fitCenterTransform())
.into(imageView);
如果您使用生成的API,轉換方法是鏈式的,所以更加容易:
GlideApp.with(fragment)
.load(url)
.fitCenter()
.into(imageView);
有關使用RequestOption的信息,請查閱選項頁面。
默認情況下,對每一個后續(xù)調用transform()或者任何特定對轉換方法(fitCenter(),centerCrop(),bitmapTransform()等等)將替換之前的轉換。
為了將多重轉換應用到單一到負載,請使用MultiTransformation類。
使用生成的API:
GlideApp.with(fragment)
.load(url)
.transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
.into(imageView);
將轉換傳遞給MultiTransformation的構造函數(shù)的次序決定了應用轉換的次序。
轉換是無狀態(tài)的。因此,多重負載中重用轉換實例應該總是安全的。通常情況下,一次創(chuàng)建轉換,然后將其傳遞給多重加載是好的做法。
在Glide中當您開啟加載到ImageView時,Glide可能自動應用FitCenter或CenterCrop,具體取決于視圖的縮放類型。如果縮放類型是CENTER_CROP,Glide會自動應用CenterCrop轉換。如果縮放類型是FIT_CENTER或者CENTER_INSIDE,則Glide會自動應用FitCenter 轉換。
您可以總是通過應用具有轉換設置的請求選項覆寫默認的轉換。另外,您可以使用dontTransform()確保沒有自動的轉換。
因為Glide v4.0允許您指定要解碼的資源的超類型。您可能不知道要應用哪種轉換類型。例如,當您使用asDrawable()(或者只是with(),因為asDrawable()是默認值)請求Drawable資源時,可能獲取到BitmapDrawable的子類或者GifDrawable的子類。
為了確保您添加的任何轉換都能被請求選項應用,Glide會將您提供的資源類到轉換的映射添加到transform()方法。資源解碼后,Glide使用映射來檢索相應資源的轉換。
Glide可以應用Bitmap轉換成BitmapDrawable,GifDrawable,以及Bitmap資源,所以通常您只需要編寫以及應用Bitmap轉換。但是,如果您添加額外的資源類型,您可能需要考慮子類化RequestOption并且總是給您的自定義資源應用轉換,除了內置的Bitmap轉換。