我正在尝试使用UIL加载低分辨率图像,然后在准备就绪时加载高分辨率版本。我遇到的问题是只有第一次调用imageView.setImageBitmap(bitmap);正在执行。高分辨率图像永远不会放入图像视图中。
我使用的是1.8.6版本,似乎后来的请求被engine.cancelDisplayTaskFor(imageView)调用取消了;在DisplayBitmapTask中。我的代码出了什么问题?如何避免取消后续的displayImage()请求?
public static DisplayImageOptions.Builder getDefaultDisplayImageOptions() {
return new DisplayImageOptions.Builder()
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565) // Will be overridden by decodingOptions()
.cacheInMemory(true)
.cacheOnDisc(true)
.displayer(new SimpleBitmapDisplayer()); // default
}
public static void displayImageWithPlaceholder(final ImageView imageView, final String imageUrl, final String previewImageUrl) {
DisplayImageOptions.Builder builder = getDefaultDisplayImageOptions();
DisplayImageOptions displayImageOptions = builder.displayer(new SimpleBitmapDisplayer2()).build();
ImageLoader.getInstance().displayImage(
previewImageUrl,
imageView,
displayImageOptions,
new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Turn off cache in memory for this call getting the larger images.
// It will still be cached on disk if possible.
DisplayImageOptions.Builder builder = getDefaultDisplayImageOptions();
DisplayImageOptions displayImageOptions = builder.cacheInMemory(false).displayer(new SimpleBitmapDisplayer2()).build();
ImageLoader.getInstance().displayImage(imageUrl, imageView, displayImageOptions, new SimpleImageLoadingListener() {});
}
}
);
}
private static class SimpleBitmapDisplayer2 implements BitmapDisplayer {
@Override
public Bitmap display(Bitmap bitmap, ImageView imageView, LoadedFrom loadedFrom) {
imageView.setImageBitmap(bitmap);
return bitmap;
}
}
答案 0 :(得分:1)
此时UIL的逻辑如下:首先执行回调onLoadingComplete(...)
,然后将当前Imageview
的任务标记为已取消。因此,取消了全尺寸图像的第二项任务。
您只能通过更改UIL的来源来解决此问题。将它们复制到项目中或将UIL:project添加为Android库依赖项。
然后在DisplayBitmapTask
类中交换两行74和75。即
取代
listener.onLoadingComplete(imageUri, imageView, displayedBitmap);
engine.cancelDisplayTaskFor(imageView);
带
engine.cancelDisplayTaskFor(imageView);
listener.onLoadingComplete(imageUri, imageView, displayedBitmap);