Glide 在旋转(方向改变)时第一次不从内存加载图像,之后从内存加载。
我试图增加内存大小、位图池大小、各种缓存策略......似乎没有任何效果......
我附上了一个视频。
谢谢!
Glide 在旋转(方向改变)时第一次不从内存加载图像,之后从内存加载。
我试图增加内存大小、位图池大小、各种缓存策略......似乎没有任何效果......
我附上了一个视频。
谢谢!
您ImageView
的 s 在纵向和横向中的大小不完全相同,您可能正在使用fitCenter()
或centerCrop()
将图像调整为该ImageView
大小。当您更改方向时,Glide 会从缓存中加载全尺寸图像,但它必须在显示之前先在后台线程上调整它的大小,这就是您在第一次方向更改后看到延迟的原因。在纵向和横向调整大小的图像都在内存缓存中后,不再有延迟。
.dontAnimate()
将此添加到 Glide 解决了我的问题
Glide.with(view.getContext())
.load(url)
.placeholder(placeholder_image_crop))
.dontAnimate()
.into(view)
您可能会因为以下原因而遇到此问题
CircleImageView/CircularImageView/RoundedImageView
已知TransitionDrawable
(.crossFade() 与 .thumbnail() 或 .placeholder())和动画存在问题GIFs
,请使用BitmapTransformation
(.circleCrop() 将在 v4 中提供)或.dontAnimate()
解决问题。
只是为了强调上面写的内容并添加解决方案。
可以更改磁盘缓存策略以缓存源图像,但不能更改内存缓存策略,在这种情况下,除非大小相同,否则不会命中。
我所做的是使用 .override(width,height) 来覆盖此策略并将源图像保留在内存缓存中。
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight)
.into(imgView);
要从缓存加载图像,您可以传递DiskCacheStrategy.SOURCE
从缓存加载图像。
您可以使用如下所示的 glide 并保留不设置动画方法,因为它有助于在适配器中加载图像而无需更新完整列表。更多检查这个
Glide.with(context)
.load(row_object.getImage())
.dontAnimate() // will load image
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.placeholder(ContextCompat.getDrawable(context,
R.mipmap.ic_user_placeholder_50dp))
.into(holder.rowIvPostUserIcon);
这段代码帮助我:
Glide.with(view.getContext())
.load(url)
.placeholder(AppCompatResources.getDrawable(view.getContext(), R.drawable.vector_placeholder_vendor_image_crop))
.dontAnimate()
.into(view);
//need add .dontAnimate()
欲了解更多信息: https ://github.com/bumptech/glide/issues/1026#issuecomment-191709837
第一次滑行无法在圆形 Imageview 等自定义视图上加载图像。您可以使用错误在第一次加载图像。
以下代码段应该对您有所帮助:
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight).error(R.drawable.yourdrawable)
.into(imgView);