是否可以让Android Glide等待/重新加载正在其他线程中保存的图像?

时间:2019-01-19 05:40:08

标签: android android-recyclerview android-glide

我正在为Glide的Android绑定适配器中使用RecyclerView

当用户从详细信息片段中导航出来时,RecyclerView将加载,然后返回到图库片段,其中显示了详细片段中刚刚发生的事情的缩略图。

有时RecyclerView正在加载时,RecyclerView中的一个图像仍被写入由细节开始的另一个线程(如果需要的话,是Kotlin coroutine)片段。

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)
  }
}

谢谢!
约翰

1 个答案:

答案 0 :(得分:0)

  

背景线程也在后台线程上加载图像   直接使用submit(int,int):

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

 Bitmap bitmap = futureTarget.get();
  

//使用位图,然后在完成后进行操作:

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

您也可以开始   异步加载在后台线程上的方式与在异步线程上加载方式相同   前台线程(如果不需要)上的位图或可绘制   后台线程本身:

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

from glide(v4) docs

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