我正在为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)
}
}
谢谢!
约翰
答案 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>() {
...
});
请让我知道哪个部分让您感到困惑,以及您使用的是glide v3还是v4