2015-06-17 3 views
2

В настоящее время я использую загрузчик изображений Volley для загрузки и кеширования изображений в своем приложении. Кэширование работает правильно, но я вижу, что когда я пытаюсь загрузить один и тот же сетевой образ в другой размер ImageView, кеш не пострадает. Я считаю, что это происходит потому, что getCacheKey в ImageLoader присоединяет размер растрового изображения в ключе:Android Volley Image Caching Разные растровые изображения

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 загружает и использовать его для всех различных размеров, которые мне нужны, вместо того, чтобы сделать другой сетевой запрос для одного и того же изображения, но другого размера?

Благодаря

ответ

0

Предполагая, что вы с помощью NetworkedImageView, Volley только ударил кэшированные изображения L1 для URL, если оба макета PARAMS установлены в WRAP_CONTENT, или ширина и высота точки зрения точно так же, как и один из которых был получен ранее. Один из способов обойти это игнорировать ширину и высоту:

private static String getCacheKey(String url, int maxWidth, int maxHeight) { 

    return (new StringBuilder(url.length() + 12)).append(url).toString(); 
} 

Другой метод будет создать свой собственный подкласс NetworkedImageView, который устанавливает MaxWidth и MaxHeight в 0 до запроса.

1

Похоже, если вы загрузите изображение без использования 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 # Н0. Это потеряет некоторую скорость, потому что ImageView придется выполнять работу по изменению размера изображения, но теперь нам не нужно делать сетевые запросы для одного и того же изображения.

+0

Вы можете сделать это более простым способом: imageLoader.get (url, ImageLoader.getImageListener (imageView, defaultDrawable, errorDrawable)); – DragonT

Смежные вопросы