【发布时间】:2015-08-26 21:56:52
【问题描述】:
Glide 在旋转(方向改变)时第一次不从内存中加载图像,之后从内存中加载。
我尝试增加内存大小、位图池大小、各种缓存策略……似乎没有任何效果……
我附上了一个视频。
谢谢!
【问题讨论】:
-
这里是相关的 Glide 问题:github.com/bumptech/glide/issues/598
标签: android image-loading android-glide
Glide 在旋转(方向改变)时第一次不从内存中加载图像,之后从内存中加载。
我尝试增加内存大小、位图池大小、各种缓存策略……似乎没有任何效果……
我附上了一个视频。
谢谢!
【问题讨论】:
标签: android image-loading android-glide
您的ImageViews 在纵向和横向上的大小不完全相同,您可能正在使用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() 来解决问题。
【讨论】:
de.hdodenhof.circleimageview.CircleImageView,则需要添加dontAnimate(),如本答案所示
只是为了强调上面写的内容并添加解决方案。
可以更改磁盘缓存策略以缓存源图像,但不能更改内存缓存策略,否则除非大小相同,否则不会命中。
我所做的是使用 .override(width,height) 来覆盖此策略并将源图像保留在内存缓存中。
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight)
.into(imgView);
【讨论】:
要从缓存中加载图像,您可以传递DiskCacheStrategy.SOURCE 以从缓存中加载图像。
您可以使用如下所示的 glide 并保持不设置动画方法,因为它有助于在适配器中加载图像而无需更新完整列表。更多请查看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);
【讨论】:
.dontAnimate() 将此添加到Glide 解决了我的问题。谢谢
.dontAnimate() 解决了这个问题。我从 2015 年开始使用 Glide,但以前从未这样做过。真的很奇怪:/
de.hdodenhof.circleimageview.CircleImageView
这段代码对我有帮助:
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 等自定义视图上加载图像。您可以使用错误在第一次加载图像。
下面的 sn-p 应该可以帮到你:
Glide.with(context)
.load(imgUrl)
.crossFade()
.override(imageWidth,imageHeight).error(R.drawable.yourdrawable)
.into(imgView);
【讨论】: