如何使用动态图像URI缓存图像?

时间:2013-12-07 23:33:16

标签: android image caching universal-image-loader

如何设置Android Universal Image Loader以加载动态图片URI?

例如:

两个URI必须代表相同的远程图像image.jpg

参考:

  

有时,您可能不希望将图像URL用作缓存键,因为   URL的一部分是动态的(即:用于访问控制目的)

SDWebImage - Using cache key filter

我在iOS应用程序中使用SDWebImage,我真的需要一个类似的功能才能在其Android版本中使用UIL。

1 个答案:

答案 0 :(得分:0)

我认为你可以使用这个内存缓存装饰器:

public class CustomMemoryCache implements MemoryCacheAware<String, Bitmap> {

    private final MemoryCacheAware<String, Bitmap> cache;

    public CustomMemoryCache(MemoryCacheAware<String, Bitmap> cache) {
        this.cache = cache;
    }

    @Override
    public boolean put(String key, Bitmap value) {
        return cache.put(cleanKey(key), value);
    }

    @Override
    public Bitmap get(String key) {
        return cache.get(cleanKey(key));
    }

    @Override
    public void remove(String key) {
        cache.remove(cleanKey(key));
    }

    @Override
    public Collection<String> keys() {
        return cache.keys();
    }

    @Override
    public void clear() {
        cache.clear();
    }

    private String cleanKey(String key) {
        return key.substring(0, key.lastIndexOf("?")) + 
                 key.substring(key.lastIndexOf("_")); 
            // original cache key is like "[imageUri]_[width]x[height]"
    }
}

然后包装任何就绪内存缓存实现并将其设置为配置。 例如:

LruMemoryCache memoryCache = new LruMemoryCache(memoryCacheSize);
CustomMemoryCache memoryCacheDecorator = new CustomMemoryCache(memoryCache);

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    ...
    .memoryCache(memoryCacheDecorator)
    ...
    .build();