选项
请求选项
Glide中大多数的选项可以使用RequestOptions类和apply()方法来应用。
使用请求选项(其中包括):
- 占位符
- 转换
- 缓存策略
- 组件特定选项,如编码或解码质量,Bitmap配置。
例如,要应用CenterCrop、Transformation,您的代码可以这样编写:
import static com.bumptech.glide.request.RequestOptions.centerCropTransform;
Glide.with(fragment)
.load(url)
.apply(centerCropTransform(context))
.into(imageView);
从RequestOptions引入静态方法将是更加灵活的方式。
如果您始终想要在程序的不同部分共享选项,您可以实例化一个新的RequestOptions对象并传递给每个负载操作:
RequestOptions cropOptions = new RequestOptions().centerCrop(context);
...
Glide.with(fragment)
.load(url)
.apply(cropOptions)
.into(imageView);
apply()可以被调用多次,所以RequestOptions可以组合。如果两个RequestOptions对象包含冲突的,那么最后设置的RequestOptions才会生效。
过渡选项
过渡选项决定在请求完成后,将会发生什么。
应用过渡选项:
- View淡入
- 占位符淡出
- 没有过渡效果
没有过渡效果,您的图像会突然出现,立即替代之前的图像。为了避免突然改变,您可以淡入View,或者使用过渡选项在Drawable之间淡入淡出。
例如,应用淡入淡出:
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
Glide.with(fragment)
.load(url)
.transition(withCrossFade())
.into(view);
与请求选项不同,过渡选项是您使用Glide加载绑定资源的特殊类型。
因此,当您请求Bitmap时,您需要使用BitmapTransitionOption而不是DrawableTransitionOptions。因此,当您请求Bitmap,您可能需要的是简单的淡入,而不是淡入淡出。
RequestBuilder
在Glide中RequestBuilder是请求的核心,负责携带您的选项跟您请求URL/模型开启新的负载。
使用RequestBuilder指定:
- 要加载的资源类型(Bitmap,Drawable等等)
- 从URL/模型中加载资源
- 加载资源到View
- 任何您想申请的RequestOption对象
- 任何您想申请的TransitionOption对象
- 任何您想加载的缩略图
每次调用Glide.with()您都会产生一个RequestManager对象:
RequestManager requestManager = Glide.with(this);
选择资源类型
RequestManager可以指定加载的资源类型。默认情况下,获取的是Drawable RequestBuilder。您可以使用as...方法改变请求类型。例如,您可以调用asBitmap()您将获取一个Bitmap RequestBuilder。
RequestBuilder<Bitmap> requestBuilder = Glide.with(fragment).asBitmap();
应用请求选项
如上所示,通过apply()方法应用请求选项,使用transition()方法应用过渡选项:
RequestBuilder<Drawable> requestBuilder = Glide.with(this).asDrawable();
requestBuilder.apply(requestOptions);
requestBuilder.transition(transitionOptions);
启动多个负载时,RequestBuilder可以被重用:
RequestBuilder<Drawable> requestBuilder =
Glide.with(fragment)
.asDrawable()
.apply(requestOptions);
for (int i = 0; i < numViews; i++) {
ImageView view = viewGroup.getChildAt(i);
String url = urls.get(i);
requestBuilder.load(url).into(view);
}