Glide预加载仅在指定大小时才有效

时间:2016-07-10 14:04:12

标签: android android-glide

我有一个带有长图像的应用程序。我想预先加载即将播出的图像,以便用户在屏幕上显示较少(理想情况下没有)延迟。

我一直尝试使用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的正确尺寸。

1 个答案:

答案 0 :(得分:0)

将DiskCacheStrategy.SOURCE用于预加载和请求(对于远程图像)。

结果是Glide 3中的默认设置,这要求您的请求具有与预加载完全相同的变换,宽度和高度。

在预加载中使用ALL实际上会将相同的数据缓存两次(因为没有指定转换,并且您正在使用SIZE_ORIGINAL来阻止下采样)。