2013-12-07 41 views
1

如何设置Android Universal Image Loader加载动态图像URI?如何使用动态图像URI缓存图像?

例如:

两者的URI必须表示相同的远程图像image.jpg

参考:

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

SDWebImage - Using cache key filter

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

回答

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();