我想在gridview中显示我的图像(存储在drawable文件夹中)。有12张图片。为此,我做了一个ImageAdapter类。当我打开我的GridViewActivity我的应用程序崩溃时说“内存不足:位图大小超过VM预算”。这是代码。
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
Context context;
Integer[] imageIDs = { R.drawable.lw01_04_001, R.drawable.lw01_04_002,
R.drawable.lw01_04_003, R.drawable.lw01_04_004,
R.drawable.lw01_04_005, R.drawable.lw01_04_006,
R.drawable.lw01_04_007, R.drawable.lw01_04_008,
R.drawable.lw01_04_009, R.drawable.lw01_04_010,
R.drawable.lw01_04_011, R.drawable.lw01_04_012, };
public ImageAdapter(Context ctx) {
context = ctx;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return imageIDs.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(5, 5, 5, 5);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageIDs[position]);
return imageView;
}
}
GridViewActivity.java
public class GridViewActivity extends ActionBarActivity {
private Utils utils;
private ImageAdapter imageAdapter;
private GridView gridView;
private int columnWidth;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
context = this;
gridView = (GridView) findViewById(R.id.grid_view);
utils = new Utils(this);
// Initilizing Grid View
InitilizeGridLayout();
imageAdapter = new ImageAdapter(context);
// setting grid view adapter
gridView.setAdapter(imageAdapter);
}
答案 0 :(得分:0)
您的图片可能太大了。当您为ImageView提供图像资源ID时,ImageView会生成该资源的位图,然后将其保存在内存中。虽然大多数现代设备都具有足够的内存来轻松处理多个大图像,但Android会为每个应用分配极少量的内存。这意味着您在处理图像时需要聪明,特别是当您需要显示其中的许多图像时。
以下是一些选项:
确保可绘制文件夹中的图像不大于它们所需的图像(即,它们不应大于显示它们的视图的尺寸)。这可能是最佳选择,因为除了降低内存要求外,您还将减少生成的APK文件的大小。
如果您不想缩小可绘制文件夹中的图像(例如,如果用户点击它们,您可能需要以完整尺寸显示它们),请在运行时缩小图像。此选项需要更多代码,但您可以灵活地显示图像,而不会遇到内存不足问题。
以下是选项#2的代码示例:
Options opts = new Options();
opts.outWidth = 85; //Based on your size requirement.
opts.outHeight = 85;
Bitmap b = BitmapFactory.decodeResource(getResources(), imageIDs[position], opts);
imageView.setImageBitmap(b);
这应该让你开始。
答案 1 :(得分:-1)
您的位图可能太大了。
我建议你查看这个问题:Out of Memory Error ImageView issue