我正在加载动态生成的图像,所以我总是希望它们是最新的。但是它们需要时间来加载所以我也希望显示一个缓存版本,而更新后的版本不会出现。 如何使用Universal Image Loader进行此操作?
更具体地说,当我调用“displayImage”时,我希望它能够执行以下操作:
答案 0 :(得分:26)
所以最后我使用了ImageLoadingListener,如下所示:
<强> onLoadingStarted:强> 加载开始时检查缓存。
<强> onLoadingComplete:强> 如果没有找到缓存,则不执行任何操作。请求将被发送到网络,缓存将自然更新。 否则清除缓存并再次调用displayImage(这次不需要监听器)。缓存的图像将正常显示在视图中。此外,当第二次加载完成时,将更新视图和缓存。
ImageLoader.getInstance().displayImage(imageUri, view, new SimpleImageLoadingListener() {
boolean cacheFound;
@Override
public void onLoadingStarted(String url, View view) {
List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(url, ImageLoader.getInstance().getMemoryCache());
cacheFound = !memCache.isEmpty();
if (!cacheFound) {
File discCache = DiscCacheUtils.findInCache(url, ImageLoader.getInstance().getDiscCache());
if (discCache != null) {
cacheFound = discCache.exists();
}
}
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (cacheFound) {
MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());
DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache());
ImageLoader.getInstance().displayImage(imageUri, (ImageView) view);
}
}
});
}
答案 1 :(得分:1)
您可以使用ImageLoadingListener。该接口有4种方法可以覆盖: onLoadingStarted,onLoadingFailed,onLoadingComplete,onLoadingCancelled。在onLoadingStarted中,您可以将图像设置为缓存图像,然后在完成后更改它。
所以电话会是这样的:
imgLoader.displayImage(url, myImageView,new ImageLoadingListener()
{
@Override
public void onLoadingStarted(String arg0, View arg1) {
//Display cached image if it exists
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2)
{
((ImageView)arg1).setBitmapImage(arg2);
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
// TODO Auto-generated method stub
}
});
答案 2 :(得分:0)
private lateinit var options: DisplayImageOptions
options = DisplayImageOptions.Builder()
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.cacheOnDisk(true)
.cacheInMemory(true)
.build()
ImageLoader.getInstance().displayImage(Model.img_url, itemView.ivPlayer, options)