Универсальный загрузчик изображений с использованием 2 средств отображения

Как я могу добавить FadeInBitmapDisplayer И RoundedBitmapDisplayer к моему изображению?

Это мои DisplayImageOptions

options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.appwidget
.cacheInMemory().displayer(new FadeInBitmapDisplayer(1500))
.build();

И возможно ли как-то использовать эффект FadeIn только один раз? И если он загружен, и я прокручиваю свой список вниз и снова прокручиваю вверх, он не исчезает во второй раз?

Заранее большое спасибо!


person user754730    schedule 01.12.2012    source источник


Ответы (3)


Как я могу добавить FadeInBitmapDisplayer И RoundedBitmapDisplayer к моему изображению?

В текущей версии никак. Вы можете создать свой собственный дисплей (расширить BitmapDisplayer) и скопировать код из FadeInBitmapDisplayer и RoundedBitmapDisplayer в свой класс.

И возможно ли как-то использовать эффект FadeIn только один раз?

Почти все возможно :) Но это будет не очень удобно.

Вы можете хранить отображаемые URL-адреса изображений на какой-либо карте (Map<String, Boolean> = [URL-адрес изображения‹->isDisplayed]) и проверять эту карту перед вызовом imageLoader.displayImage(...). Если изображение для текущего URL-адреса находится на карте (т. е. изображение было отображено), используйте параметры только с RoundedBitmapDisplayer. Если изображения для текущего URL-адреса нет на карте, используйте параметры с дисплеем FadeInBitmapDisplayer+RoundedBitmapDisplayer.

person nostra13    schedule 02.12.2012
comment
Хорошо спасибо большое! Будете ли вы реализовывать подобную функцию (для FadeIn и Rounded) в будущей версии? - person user754730; 03.12.2012
comment
Может быть, я сделаю такие дисплеи, как Decorators, чтобы они могли обтекать друг друга. Увидим. - person nostra13; 03.12.2012

Как я могу добавить FadeInBitmapDisplayer И RoundedBitmapDisplayer к моему изображению?

Тоже была эта проблема. Я воспользовался отличным предложением NOSTRA, и вот мой собственный класс:

public class FadeInRoundedBitmapDisplayer extends RoundedBitmapDisplayer {

    int durationMillis;
    String noRoundedCornersTag;

    public FadeInRoundedBitmapDisplayer(int durationMillis, int roundPixels,
            String noRoundedCornersTag) {
        super(roundPixels);
        this.durationMillis = durationMillis;
        this.noRoundedCornersTag = noRoundedCornersTag;
    }

    @Override
    public Bitmap display(Bitmap bitmap, ImageView imageView,
            LoadedFrom loadedFrom) {
        imageView.setImageBitmap((imageView.getTag() != null && imageView
                .getTag().equals(noRoundedCornersTag)) ? bitmap : super
                .display(bitmap, imageView, loadedFrom));

        animate(imageView, durationMillis);

        return bitmap;
    }

    public static void animate(ImageView imageView, int durationMillis) {
        AlphaAnimation fadeImage = new AlphaAnimation(0, 1);
        fadeImage.setDuration(durationMillis);
        fadeImage.setInterpolator(new DecelerateInterpolator());
        imageView.startAnimation(fadeImage);
    }

}

Вы можете передать String noRoundedCornersTag конструктору. Это позволяет вам указать отдельные imageView в макете XML, чтобы пропустить процедуру закругления углов (хорошо для фоновых изображений и т. д.), например:

<ImageView
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:tag="@string/no_rounded_corners_tag" />

Вызов конструктора будет выглядеть так:

new FadeInRoundedBitmapDisplayer(Constants.IMAGE_FADING_TIME,
  getResources().getDimension(R.dimen.image_corner_radius),
  getResources().getString(R.string.no_rounded_corners_tag))
person saschoar    schedule 20.09.2013
comment
Уже успел выполнить задание. Но может быть очень интересным для тех, у кого такая же проблема. Потрясающий кусок кода. - person user754730; 24.09.2013

Мне пришлось обновить решение @saschoar, так как оно не работало с текущей версией Universal Image Loader (1.9.4). Решение очень похожее. Взглянем:

public class FadeInRoundedBitmapDisplayer extends RoundedBitmapDisplayer {

    int durationMillis;

    public FadeInRoundedBitmapDisplayer(int durationMillis, int roundPixels) {

        super(roundPixels);
        this.durationMillis = durationMillis;
    }

    @Override
    public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {

        super.display(bitmap, imageAware, loadedFrom);

        animate(imageAware.getWrappedView(), durationMillis);
    }

    public static void animate(View imageView, int durationMillis) {

        AlphaAnimation fadeImage = new AlphaAnimation(0, 1);
        fadeImage.setDuration(durationMillis);
        fadeImage.setInterpolator(new DecelerateInterpolator());
        imageView.startAnimation(fadeImage);
    }
}

Вы можете использовать это решение для определения DisplayImageOptions следующим образом:

    DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
        .displayer(new FadeInRoundedBitmapDisplayer(3000, 1000))
        .build();

    ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.displayImage(imageUrl, imageView, displayImageOptions);
person Fer    schedule 03.11.2015