Android Volley 图像缓存不同大小的位图

标签 android image caching bitmap android-volley

我目前正在使用 Volley Image Loader 在我的应用程序中加载和缓存图像。缓存工作正常,但我看到当我尝试将相同的网络图像加载到不同大小的 ImageView 时,缓存不会被命中。我相信这是因为 ImageLoader 中的 getCacheKey 将位图的大小附加到 key :

private static String getCacheKey(String url, int maxWidth, int maxHeight) {
    return (new StringBuilder(url.length() + 12)).append("#W").append(maxWidth).append("#H").append(maxHeight).append(url).toString();
}

我如何保存 Volley 正在下载的图像并将其用于我需要的所有不同尺寸,而不是必须对同一图像但尺寸不同的另一个网络请求?

谢谢

最佳答案

看起来如果您在不使用 NetworkedImageView 的情况下加载图像,那么加载的图像将是完整图像。因此,我没有使用 NetworkedImageView,而是像这样加载图像:

getImageLoader().get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {
                ((ImageView)view).setLocalImageBitmap(imageContainer.getBitmap());
            }

            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });

这将加载带有#W0#H0 键的图像。这会降低一些速度,因为 ImageView 必须执行调整图像大小的工作,但现在我们不必为同一图像发出网络请求。

关于Android Volley 图像缓存不同大小的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904393/

相关文章:

java - Android - 创建适配器时出现 NullPointerException

php - 预览图像在 Jw Player 6 中不起作用

image - QML如何像MacOSX dock的背景货架图像一样旋转图像

python - 是否可以将 render_to_response 模板从 django 保存到服务器?

javascript - 将http缓存解码为普通html页面

android - 未找到 fragment Dagger 2.14.1 的注入(inject)器

java - 从 Android 中的自定义对象动态更新 textView

android - 如何在 Android 上创建自定义通知。文字代替图像

ios - Xcode Assets 目录中的应用程序图标大小

c - C 中的 LRU 缓存设计,大小有限