我需要通过从服务器下载图像来将图像设置为 ImageSwitcher。但是通用图像加载器似乎将 ImageView 作为参数。
我读到我们可以使用 ImageAware 在任何 android 视图上显示图像。
有人可以帮我解决这个问题吗?
谢谢, 斯内哈
我需要通过从服务器下载图像来将图像设置为 ImageSwitcher。但是通用图像加载器似乎将 ImageView 作为参数。
我读到我们可以使用 ImageAware 在任何 android 视图上显示图像。
有人可以帮我解决这个问题吗?
谢谢, 斯内哈
改为使用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
}
});
你也可以用ImageAware
界面包装你的视图。然后你可以将这个包装器传递给displayImage(...)
方法。
您可以查看ImageViewAware
以了解它是如何包装ImageView
的。所以你可以用同样的方式包装任何视图。
您最终可以检查 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));
}