如何将FadeInBitmapDisplayer和RoundedBitmapDisplayer添加到我的图像?
这是我的DisplayImageOptions
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.appwidget
.cacheInMemory().displayer(new FadeInBitmapDisplayer(1500))
.build();
是否有可能以某种方式仅使用FadeIn效果一次?如果它已加载,我向下滚动列表并再次向上滚动它不会再次出现FadeIn?
提前多多谢谢!
答案 0 :(得分:11)
如何将FadeInBitmapDisplayer和RoundedBitmapDisplayer添加到我的图像?
当前版本没有办法。您可以创建自己的显示器(扩展BitmapDisplayer)并将代码从FadeInBitmapDisplayer和RoundedBitmapDisplayer复制到您的类中。
是否有可能以某种方式仅使用FadeIn效果一次?
几乎一切皆有可能:)但它不会那么方便。
您可以将显示的图片网址保留在某个地图中(Map<String, Boolean>
= [图片网址&lt; - &gt; isDisplayed])并在imageLoader.displayImage(...)
调用之前检查此地图。如果当前URL的图像在Map中(即显示图像),则使用仅包含RoundedBitmapDisplayer的选项。如果当前URL的图像不在Map中,则使用FadeInBitmapDisplayer + RoundedBitmapDisplayer显示器的选项。
答案 1 :(得分: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);
}
}
您可以将String noRoundedCornersTag
传递给构造函数。这使您可以在XML布局中为单个imageView
提供标记以跳过角半径过程(适用于背景图像等),例如:
<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))
答案 2 :(得分:3)
我不得不更新@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);