我有一个带有长图像的应用程序。我想预先加载即将播出的图像,以便用户在屏幕上显示较少(理想情况下没有)延迟。
我一直尝试使用preload()和downloadOnly()的不同变体,唯一合适的组合就是让preload和load都使用完全相同的大小参数。
预压:
Glide.with(AbstractFeedFragment.this)
.load(picture.getUrl())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.preload();
这里的preload()与使用preload(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL)相同
当屏幕显示时,将实际图像加载到ImageView中:
requestManager
.load(url)
// Use the same dimensions used as when preloading.
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.placeholder(placeholderColor)
.error(R.color.image_fallback_bg)
.dontTransform()
.into(imageView);
如果我删除了覆盖或dontTransform方法,图像会在屏幕上显示时再次下载(即使我只是预装了它)。
我做错了吗?我的理解是DiskCacheStrategy.ALL会将原始图像放在缓存中,然后在真实显示时将其检索并调整大小。
有没有办法加载图像而不实际显示时指定SIZE_ORIGINAL?如果我理解正确,这意味着我现在以全尺寸显示图像,而不是我的ImageView的正确尺寸。
答案 0 :(得分:0)
将DiskCacheStrategy.SOURCE用于预加载和请求(对于远程图像)。
结果是Glide 3中的默认设置,这要求您的请求具有与预加载完全相同的变换,宽度和高度。
在预加载中使用ALL实际上会将相同的数据缓存两次(因为没有指定转换,并且您正在使用SIZE_ORIGINAL来阻止下采样)。