我正在使用fancyCoverFlow和universalImageLoader来显示我的自定义3D图库:D类似下图。我的问题是它没有在下载时显示图像,除非我在画廊图片之间滑动并且该图片在屏幕上隐藏,并且在下次显示图像时出现但是在UniversalImageLoader的样本中,下载的图像在他们下载后立即显示。
这是适配器的getView代码:
this
它与UniversalImageLoader完全相同Sample预计我有一个TryCatche和CreateReflectedImage(它使我们的ImageView反射)
,我的ImageLoaderHelper还有一件事:
public View getView(int position, View view, ViewGroup parent) {
RoundedImageView photo = (RoundedImageView) view;
if (photo == null) {
photo = (RoundedImageView) inflater.inflate(R.layout.row_gallery_latest_issue_item, parent, false);
}
try {
System.out.println("Test is good");
ImageLoaderHelper.configureCacheableImage(mContext, photo, latestBook.get(position).getImageUrl(),
R.drawable.avatar_issue, null);
} catch (NullPointerException e) {
photo.setImageResource(R.drawable.avatar_issue);
e.printStackTrace();
}
return createReflectedImages(photo);
}
}
更新:
经过一天的调试后,我找到了一条线索问题出在我的适配器上但是我不知道如何解决它!
以下是CreateReflectedImages()的代码:
public class ImageLoaderHelper {
public static void configureCacheableImage(Context context, ImageView imageView
, String imageUrl, Integer defaultImageResourceId
, ImageLoadingListener imageLoadingListener) {
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
builder.displayer(
new SimpleBitmapDisplayer())
.cacheOnDisc(true)
.cacheInMemory(true)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(Bitmap.Config.RGB_565);
if (defaultImageResourceId != null)
builder.showImageOnFail(defaultImageResourceId).showImageForEmptyUri(defaultImageResourceId).showStubImage(defaultImageResourceId);
if (!imageLoader.isInited())
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
imageLoader.displayImage(imageUrl, imageView, builder.build(), imageLoadingListener);
}
答案 0 :(得分:1)
问题是你有两个独立的imageview实例。 1在getView中创建,第二个在createReflectedImage中创建。基本上,当图像完成下载时,新的图像视图已经替换它,并且下载的图像被加载到不再可见(或甚至可能存在)的图像中。它第二次正确加载(在屏幕外滚动之后)的原因是延迟低得多,因为它是从内存加载而不是从网上或任何地方加载的,所以当RoundedDrawable drawable =(RoundedDrawable)image.getDrawable();它实际上有你想要的图像,而不仅仅是占位符!
public View getView(int position, View view, ViewGroup parent) {
RoundedImageView photo = (RoundedImageView) view;
...
/*
*Passing first instance of photo into ImageLoaderHelper
*/
ImageLoaderHelper.configureCacheableImage(mContext, photo, latestBook.get(position).getImageUrl(),
R.drawable.avatar_issue, null);
...
//
//Returns the new instance of RoundedImageView that ImageLoader is not aware of to the adapter
//
return createReflectedImages(photo);
}
public ImageView createReflectedImages(RoundedImageView image) {
...
RoundedImageView imageView = new RoundedImageView(mContext);
imageView.setImageBitmap(bitmapWithReflection);
imageView.setLayoutParams(new ImageGallery3D.LayoutParams(GeneralHelper.dp(180), GeneralHelper.dp(240)));//width and height of Image
//Returning a new instance of imageView
return imageView;
}
不是在createReflectedImages中返回imageView,而是返回" image"。然后实现一个回调,传入ImageLoaderHelper,在成功加载图像后调用createReflectedImages来应用效果。