一.基本组件
1.基本使用
以下均基于Glide4.x版本。
1 2 3 4 5 6 7 8 9
| //加载图片 Glide.with(getContext()) .load(url) .apply(options) .into(imageView); //取消加载 Glide.with(getContext()) .clear(imageView);
|
2.RequestOptions
Glide的常用选项
- 裁剪样式circleCrop、circleCrop等。
- 加载中占位图placeholder
- 加载失败图error
- …
1 2 3 4
| RequestOptions centerCropOptions = new RequestOptions() .centerCrop() .placeholder(R.drawable.img_loading) .error(R.drawable.img_failed);
|
3.RequestBuilder
可以理解为一个个的请求。
1 2 3
| RequestBuilder builder = Glide.with(getContext()) .load(url) .apply(options);
|
当调用RequestBuilder.into(target)时开始加载。这个方法的返回值类型不再是RequestBuilder了。
二、常用操作
1.加载失败回调监听
RequestBuilder.listen(RequestListener)方法监听load成功还是失败。
- 注意这里不能在监听里对同一个target(imageView)发起加载请求,因为当前请求尚未结束,会抛出异常。
- 所以无法使用这个监听实现加载失败时加载备用url的需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Glide.with(getContext()) .load(url) .apply(options) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { //false:事件继续往下传递 //true:事件不再往下传递 return false; } @Override public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { //false:事件继续往下传递 //true:事件不再往下传递 return false; } }) .into(imageView);
|
2.请求失败后启用备用请求
RequestBuilder.error(RequestBuilder)方法可以在这个request失败后启用备用的request。
1 2 3 4 5 6 7 8 9 10
| RequestBuilder builder1 = Glide.with(getContext()) .load(url1) .apply(options); RequestBuilder builder2 = Glide.with(getContext()) .load(url2) .apply(options) .error(builder1); builder2.into(imageView);
|
这段代码意义为当url2加载失败后,会启用builder1这个请求,加载url1。这样我们就可以实现多级url加载了。
以下为多级加载url方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static void loadUrls(String[] urls, RequestOptions options, ImageView imageView) { if (urls == null || urls.length == 0) { return; } RequestBuilder<Drawable> frontBuilder = Glide.with(getContext()).load(urls[0]).apply(options); RequestBuilder<Drawable> prevBuilder = frontBuilder; for (int i = 1; i < urls.length; i++) { RequestBuilder<Drawable> nextBuilder = Glide.with(getContext()).load(urls[i]).apply(options); prevBuilder.error(nextBuilder); prevBuilder = nextBuilder; } frontBuilder.into(imageView); }
|