0

我需要通过从服务器下载图像来将图像设置为 ImageSwitcher。但是通用图像加载器似乎将 ImageView 作为参数。

我读到我们可以使用 ImageAware 在任何 android 视图上显示图像。

有人可以帮我解决这个问题吗?

谢谢, 斯内哈

4

3 回答 3

1

改为使用loadImage。这将为您提供一个位图,您可以使用它来做任何您想做的事情。

// Load image, decode it to Bitmap and return Bitmap to callback
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});
于 2014-11-13T10:27:41.180 回答
0

你也可以用ImageAware界面包装你的视图。然后你可以将这个包装器传递给displayImage(...)方法。

您可以查看ImageViewAware以了解它是如何包装ImageView的。所以你可以用同样的方式包装任何视图。

于 2014-11-13T11:38:41.540 回答
0

您最终可以检查 Loader 显示ImageAware的图像

代码 displayImage(String,ImageView) 如下

public void displayImage(String uri, ImageView imageView) {
    this.displayImage(uri, (ImageAware)(new ImageViewAware(imageView)), (DisplayImageOptions)null, (ImageLoadingListener)null, (ImageLoadingProgressListener)null);
}

ImageAware扩展了抽象类ViewAware ,这是其中的两个重要方法

protected abstract void setImageDrawableInto(Drawable var1, View var2);

protected abstract void setImageBitmapInto(Bitmap var1, View var2);

检查ImageAware实现的两种方法

protected void setImageDrawableInto(Drawable drawable, View view) {
    ((ImageView)view).setImageDrawable(drawable);
    if(drawable instanceof AnimationDrawable) {
        ((AnimationDrawable)drawable).start();
    }

}

protected void setImageBitmapInto(Bitmap bitmap, View view) {
    ((ImageView)view).setImageBitmap(bitmap);
}

所以你可以看到ImageView使用setImageBitmap来显示位图,而其他视图将使用setBackground,这是我的其他视图类

public class CustomViewAware extends ViewAware {
public CustomViewAware(View view) {
    super(view);
}

@Override
protected void setImageDrawableInto(Drawable drawable, View view) {
    view.setBackgroundDrawable(drawable);
}

@Override
protected void setImageBitmapInto(Bitmap bitmap, View view) {
    view.setBackgroundDrawable(new BitmapDrawable(bitmap));
}
于 2015-04-17T08:49:46.203 回答