【问题标题】:Glide preload only works if size is specified滑翔预载仅在指定尺寸时才有效
【发布时间】:2016-07-10 14:04:11
【问题描述】:

我有一个包含大量图片的应用。我想预加载即将发布的图像,以便用户在图像出现在屏幕上时看到更少(理想情况下没有)延迟。

我一直在尝试不同的 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);

如果我删除 override 或 dontTransform 方法,图像会在屏幕上再次下载(即使我只是预加载了它)。

我做错了吗?我的理解是 DiskCacheStrategy.ALL 会将原始图像放在缓存中,然后在真实显示时检索并调整大小。

有没有办法在实际显示图像时不指定 SIZE_ORIGINAL 来加载图像?如果我理解正确,这意味着我现在以全尺寸而不是 ImageView 的正确尺寸显示图像。

【问题讨论】:

    标签: android android-glide


    【解决方案1】:

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

    RESULT 是 Glide 3 中的默认设置,它要求您的请求具有与预加载完全相同的转换、宽度和高度。

    在你的预加载中使用 ALL 基本上会缓存相同的数据两次(因为没有指定转换并且你使用 SIZE_ORIGINAL 会阻止下采样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多