首页 > 解决方案 > 是否可以让 Android Glide 等待/重新加载保存在另一个线程中的图像?

问题描述

我在 AndroidGlide的绑定适配器中使用。RecyclerView

RecyclerView用户导航出细节片段时加载,返回到显示细节片段中刚刚发生的缩略图的画廊片段。

有时在RecyclerView加载时,其中的一个图像RecyclerView仍在coroutine由细节片段启动的另一个线程(如果重要的话是 Kotlin)中写入。

Glide找到图像并显示它,即使它不完整,也会导致画廊的RecyclerView.

有没有办法让绑定适配器在加载之前等待图像在另一个线程中完成写入,或者在完成后重新加载它?
如果重要的话,图像是PNGs

这是我在adapter课堂上的代码:

@BindingAdapter("memoThumb")
fun memoThumb(view: ImageView, memo: Memo) {
  val imageUrl = "${getPath(memo.uuid)}$THUMB_NAME"
  if (imageUrl.isNotEmpty()) {
    Glide.with(view.context)
            .load(imageUrl)
            .apply(RequestOptions()
                    .signature(ObjectKey(System.currentTimeMillis()))
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
            )
            .transition(DrawableTransitionOptions.withCrossFade())
            .into(view)
  }
}

谢谢!
约翰

标签: androidandroid-recyclerviewandroid-glide

解决方案


后台线程在后台线程上加载图像也很简单,使用 submit(int, int):

FutureTarget<Bitmap> futureTarget =
  Glide.with(context)
    .asBitmap()
    .load(url)
    .submit(width, height);

 Bitmap bitmap = futureTarget.get();

// 对位图做一些事情,然后当你完成它时:

Glide.with(context).clear(futureTarget); 

如果您不需要后台线程本身的 Bitmap 或 Drawable,您也可以像在前台线程上一样在后台线程上启动异步加载:

Glide.with(context)
  .asBitmap()
  .load(url)
  .into(new Target<Bitmap>() {
    ...
  });   

来自 glide(v4) 文档

请让我知道哪个部分让您感到困惑,以及您使用的是 glide v3 还是 v4


推荐阅读