2

我正在尝试使用 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;
    }
}
4

1 回答 1

1

此时UIL的逻辑如下:首先onLoadingComplete(...)执行回调,然后将当前任务Imageview标记为取消。因此,您的第二个全尺寸图像任务被取消。

您只能通过更改 UIL 的源来解决此问题。将它们复制到您的项目中或添加 UIL: project 作为 Android 库依赖项。然后在课堂上交换两行 74 和 75 DisplayBitmapTask。即替换

listener.onLoadingComplete(imageUri, imageView, displayedBitmap);
engine.cancelDisplayTaskFor(imageView);

engine.cancelDisplayTaskFor(imageView);
listener.onLoadingComplete(imageUri, imageView, displayedBitmap);
于 2013-08-25T14:51:05.977 回答