转换
Glide 中转换接收资源并将其转换,返回转换后的资源。通常,转换用于裁剪或者对 Bitmap 应用过滤,但也可以用来转换 Gif 动画,甚至自定义资源类型。
内置类型
Glide 中包含了一些内置的转换,包括:
- CenterCrop
- FitCenter
- CircieCrop
应用转换
使用 RequestOption 类应用转换:
默认转换
RequestOptions options = new RequestOptions();
options.centerCrop();
Glide.with(fragment)
.load(url)
.apply(options)
.into(imageView);
大多数内置的转换还可以静态导入,以便使用灵活的 API。例如,您可以使用静态方法应用 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 的信息,请查阅 选项 页面。
多重转换
默认情况下,对每一个后续调用 transform() 或者任何特定对转换方法(fitCenter(),centerCrop(),bitmapTransform() 等等)将替换之前的转换。
为了将多重转换应用到单一到负载,请使用 MultiTransformation 类。
使用生成的 API:
GlideApp.with(fragment)
.load(url)
.transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
.into(imageView);
将转换传递给 MultiTransformation 的构造函数的次序决定了应用转换的次序。
Glide 中特殊行为
重新使用转换
转换是无状态的。因此,多重负载中重用转换实例应该总是安全的。通常情况下,一次创建转换,然后将其传递给多重加载是好的做法。
ImageView 的自动转换
在 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 转换。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论