将图像加载到GridView时出现OutOfMemoryError

时间:2014-11-02 15:10:59

标签: java android gridview out-of-memory android-imageview

我正在创建一个在GridView中加载图像的应用程序但是根据我放在数组中的图像数量,我得到了 java.lang.outofmemory 错误,应用程序崩溃。
我有一个ImageAdapter,其中出现了图像加载,我正在从Androidhive开始学习本教程。我的图像总数约为4.53MB,最大的图像为1.1MB。有些图像相当小。有时当我从我的代码中加载一个应用程序运行的图像时,但是当我立即执行所有图像时它会崩溃。

answer似乎很明智,但我无法按照我的项目设置方式进行操作。我只有一个GridView,并在我的代码中以编程方式获取ImageView,但它们似乎从xml文件中引用。
这是我的getView()方法:
@Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(mContext); imageView.setImageResource(mThumbsIds[position]); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setLayoutParams(new GridView.LayoutParams(200, 200)); return imageView; } 其中mThumbsId是存储来自@drawable文件夹的图像引用的整数数组。我需要帮助调整图像的大小,我的项目设置方式,也许其他答案可以帮助,但我不能遵循他们的结构。
我的带有gridview的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:columnWidth="150dp"
android:horizontalSpacing="5dp"
android:verticalSpacing="5dp"
android:gravity="center"
android:soundEffectsEnabled="true"
android:stretchMode="columnWidth" > 

</GridView>


先进的Thanx

1 个答案:

答案 0 :(得分:1)

您提到的1161x1161像素的图像在内部转换为Bitmap。此位图(如果是32位)将占用大约5MB(1161 x 1161 x 4字节)的堆内存。

由于在GridView中使用时,您将在内存中拥有多个这些图像,因此内存不足也就不足为奇了。所以是的,您应该调整图片大小,然后再将其加载到GridView

如何调整大小上阅读此问题/答案:High resolution Image - OutOfMemoryError