4

如何将 FadeInBitmapDisplayer 和 RoundedBitmapDisplayer 添加到我的图像中?

这是我的 DisplayImageOptions

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

是否有可能只使用一次淡入效果?如果它已加载并且我向下滚动我的列表并再次向上滚动它不会第二次 FadeIn?

提前非常感谢!

4

3 回答 3

11

如何将 FadeInBitmapDisplayer 和 RoundedBitmapDisplayer 添加到我的图像中?

当前版本没有办法。您可以创建自己的显示器(扩展 BitmapDisplayer)并将代码从 FadeInBitmapDisplayer 和 RoundedBitmapDisplayer 复制到您的类中。

是否有可能只使用一次淡入效果?

几乎一切皆有可能:) 但这不会那么方便。

您可以在某些地图中保留显示的图像 URL(Map<String, Boolean>= [图像 URL<->isDisplayed])并在imageLoader.displayImage(...)调用前检查此地图。如果当前 URL 的图像在地图中(即显示图像),则仅使用 RoundedBitmapDisplayer 选项。如果当前 URL 的图像不在地图中,则使用 FadeInBitmapDisplayer+RoundedBitmapDisplayer 显示器的选项。

于 2012-12-02T15:03:47.543 回答
5

如何将 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);
    }

}

您可以将 a 传递String noRoundedCornersTag给构造函数。这使您可以imageView在 XML 布局中指定单个 s 标记以跳过圆角半径过程(适用于背景图像等),例如:

<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))
于 2013-09-20T14:27:27.990 回答
3

我不得不更新@saschoar 解决方案,因为它不适用于当前的通用图像加载器版本(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);
于 2015-11-03T15:26:28.643 回答