在旋转(方向改变)时第一次滑动不从存储器加载图像,之后从存储器加载。
我试图增加内存大小,位图池大小,各种缓存策略......似乎没什么用......
我附上了一段视频。
谢谢!
您的ImageView
s在纵向和横向上没有完全相同的大小,您可能正在使用fitCenter()
或centerCrop()
将图像调整为ImageView
大小。当您更改方向时,Glide会从缓存中加载完整大小的图像,但它必须先在后台线程上调整大小,然后再显示,这就是您在第一次方向更改后看到延迟的原因。在纵向和横向的大小调整后的图像都在内存缓存中后,不再有延迟。
只是为了强调上面写的内容并添加一个解决方案。
可以更改磁盘缓存策略以缓存源映像,但不能缓存内存缓存策略,在这种情况下,除非它的大小相同,否则不会命中。
我所做的是使用.override(宽度,高度)来覆盖此策略并将源图像保留在内存缓存中。
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight)
.into(imgView);
要从缓存加载图像,您可以传递DiskCacheStrategy.SOURCE
以从缓存加载图像。
您可以使用下面的滑动并保持不动画方法,因为它有助于在适配器中加载图像而不更新完整列表。有关更多信息,请查看this
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
.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()
来解决问题。
第一次滑行无法在自定义视图上加载图像,如圆形Imageview.you可以使用错误第一次加载图像。
以下代码段可以帮助您:
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight).error(R.drawable.yourdrawable)
.into(imgView);