Glide v4使用教程(3)——占位图

489 阅读2分钟

Glide 占位图

文章主要内容翻译自 Glide 官方文档,文档地址:bumptech.github.io/glide/doc/p…

译者注:弄明白使用方法即可和常见问题即可,它们的关系可直接参考译者最后总结的流程图。

类型

Glide 支持三种不同类型的占位图,用户可在不同的场景下看情况使用。这三种类型分别是:

  • placeholder
  • error
  • fallback

Placeholder

placeholder 是请求还未完成的时候所显示的 drawable 资源。当请求成功完成时,placeholder 会被替换成请求返回的资源。如果被请求的资源是从内存中加载的,那 placeholder 就始终不会显示。如果请求失败,且没有设置 error drawable,那 placeholder 依然会继续显示。类似地,如果请求的 url/model 为 null,并且既没有设置 error drawable 也没有设置 fallback drawable,placeholder 也将继续显示。

使用方法如下:

Glide.with(fragment)
    .load(url)
    .placeholder(R.drawable.placeholder)
    .into(view);

或者

Glide.with(fragment)
  .load(url)
  .placeholder(new ColorDrawable(Color.BLACK))
  .into(view);

Error

当请求彻底失败时,将会显示 error drawable。如果请求的 url/model 为 null 且没有设置 fallback drawable,也将显示 error drawable。

使用方法如下:

Glide.with(fragment)
    .load(url)
    .error(R.drawable.error)
    .into(view);

Glide.with(fragment)
    .load(url)
    .error(new ColorDrawable(Color.RED))
    .into(view);

Fallback

当请求的 url/model 为 null 时,将会显示 fallback drawable。fallback drawable 的主要目是让用户明确 url/model 能否为 null。例如,url 为 null 表示用户没有设置头像,应该使用默认值。但是 null 也能表示元数据非法或者无法获取。默认情况下,Glide 把 null 当成是 error,所以如果用户希望不要用 error fallback,则需要设置 fallback drawable。

常见问题

占位图是异步加载的吗?

答案是否。

这些占位图在主线程上从安卓资源中加载的。我们往往希望占位尽可能可能小并且容易被系统缓存。

Transformation 会作用到占位图中吗

译者注:transformation 和 transition 会在后续讲 option 的章节进行标注说明。

答案是否。

在应用程序中包含必须在运行时转换的资源是一种低效的做法。包含你需要的特定大小和形状的资源往往是个更好的选择。例如,如果要加载圆形图片,你应该在应用程序中包含圆形占位图资源。或者,你也可以考虑使用自定义 View,用 transformation 相同的方式来裁剪占位图。

可以在多个 View 中使用同一个 drawable 作为占位图吗?

通常可以,但是并非总是可以。

任何无状态的 Drawable(如 BitmapDrawable)通常都可以同时显示在多个 View 中的。然而,同时在多个 View 中显示有状态的 drawable 往往是不安全的,因为多个 View 可能会同时改变状态。对于有状态的 drawable,应该传递一个资源 id,或者使用 newDrawable() 给每个请求传递一个新的资源副本。

译者总结

flowchart TD
placeholder_not_null{设置了placeholder?}
error_not_null{设置了error?}
fallback_not_null{设置了fallback?}
url_null{url为null?}

requesting{请求中?}
request_success{请求成功?}

show_placeholder[显示placeholder drawable]
show_error[显示error drawable]
show_fallback[显示fallback drawable]
show_success[显示请求的资源]
not_define[无图像显示]

url_null --no--> requesting
    requesting --yes--> placeholder_not_null
        placeholder_not_null --yes--> show_placeholder
        placeholder_not_null --no--> not_define
    requesting --no--> request_success
        request_success --yes--> show_success
        request_success --no--> error_not_null

url_null --yes--> fallback_not_null
    fallback_not_null --no--> error_not_null
            error_not_null --no--> placeholder_not_null
        error_not_null --yes--> show_error
    fallback_not_null --yes--> show_fallback