Универсальный загрузчик изображений - Как загрузить второе изображение в ImageView?

Я пытаюсь использовать 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;
    }
}

1 ответ

На этот раз логика UIL следующая: при первом обратном вызове onLoadingComplete(...) выполняется, а затем задание на текущий Imageview помечены как отмененные. Так что ваше второе задание для полноразмерного изображения отменено.

Вы можете решить эту проблему только путем изменения источников UIL. Скопируйте их в свой проект или добавьте UIL: проект в зависимости от библиотеки Android. А затем поменяйте местами две строки 74 и 75 в DisplayBitmapTask учебный класс. То есть заменить

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

с

engine.cancelDisplayTaskFor(imageView);
listener.onLoadingComplete(imageUri, imageView, displayedBitmap);
Другие вопросы по тегам