imageview OutOfMemoryError异常:尝试缓存已调整大小的图像以避免异常

时间:2011-07-28 23:09:09

标签: android caching imageview out-of-memory

我已经阅读了所有outofmemoryerror线程,我知道我正在尝试调整大小到妈妈的图像。我将这些图像存储在我的服务器上,最大尺寸为250x250。我想在列表中加载它们。我已经实现了一个缓存系统,它运行良好。问题是我从服务器缓存图像大小,每次我从缓存中拉出它时仍然会调整大小。

我想在将图像放入缓存之前调整图像大小。我正在使用xml来调整列表中的图像大小。

<ImageView android:id="@+id/img_user" android:layout_width="100dp" 
        android:layout_height="100dp" 
        android:src="@drawable/noimgsmall"
        android:scaleType="fitCenter"/>

我的列表适配器是将图像放入缓存的位置。问题是我目前还不知道imageview的大小。

Drawable cachedImage = null;
                cachedImage = imageLoader.loadImage(
                        store.getLogoUrl(),
                        new ImageThreadLoader.ImageLoadedListener() {
                            public void imageLoaded(Drawable imageBitmap) {
                                View itemView = parent.getChildAt(position -
                                        ((ListView) parent).getFirstVisiblePosition());
                                if (itemView == null) {
                                    return;
                                }
                                ImageView img = (ImageView)
                                itemView.findViewById(R.id.img_user);
                                if (img == null) {
                                    return;
                                }
                                img.setImageDrawable(imageBitmap);
                            }
                        }
                );
                logoImageView.setImageDrawable(cachedImage);

如何确定要缓存的图像大小?

1 个答案:

答案 0 :(得分:1)

我最终做的是将图像调整为实际缩放尺寸然后缓存。没有更多的记忆问题。 Aviod会在列表视图中尽可能重新调整大小。