2013-12-07 71 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();