0

滚动网格视图时点击 OutOfMemoryError。

适配器代码:

    package com.example.gridviewexample;

import android.content.*;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;


    private  Integer arrayElement[] = {
             R.drawable.rkt, R.drawable.images,R.drawable.sir,R.drawable.sir2,
             R.drawable.sir3,R.drawable.sir4, R.drawable.images1,
            R.drawable.images3, R.drawable.indeerx,
            R.drawable.index,R.drawable.rkt2,R.drawable.rkt3,R.drawable.rkt4,R.drawable.rkt5,R.drawable.sir2,
            R.drawable.sir3, 
    };


    public ImageAdapter(Context c){
        mContext = c;
    }

    @Override
    public int getCount() {
        return arrayElement.length;
    }

    @Override
    public Integer getItem(int position) {
        return arrayElement[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(arrayElement[position]); 
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(200,200));
        return imageView;
    }

}

任何建议将不胜感激!

4

3 回答 3

2

尝试这样做:

public View getView(int position, View convertView, ViewGroup parent) {
    View grid = convertView;

    if (convertView == null) {
        grid = inflater.inflate(R.layout.grid1, parent, false);
    }

    TextView item = (TextView) grid.findViewById(R.id.item_title);
    item.setBackgroundResource(mThumbIds[position]);

    return grid;
}

我是用来显示图片的,你可以自己TextView试试改成。TextViewImageView

于 2013-08-27T12:00:52.157 回答
0

它是一个已知的错误,它不是因为大文件。由于 Android 缓存了 Drawables,因此在使用少量图像后内存不足。但是我通过跳过android默认缓存系统找到了替代方法。

Soultion : 在 Assets 中创建一个 drawable 文件夹并将图像移动到 assets 中的“drawable”文件夹,并使用以下函数获取 BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException {
    AssetManager assets = context.getResources().getAssets();
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
    Bitmap bitmap = BitmapFactory.decodeStream(buffer);
    return new BitmapDrawable(context.getResources(), bitmap);
}

参考:https ://stackoverflow.com/posts/6116316/revisions

于 2013-08-28T05:04:54.140 回答
0

这是一个 android 内存不足的错误 ...b/c android 堆内存不能支持大尺寸 ...所以第一步你创建可绘制文件夹将所有图像放在可绘制文件夹中,然后所有图像扩展 .jpg b/c .png 都有 alrg大小并尝试将此代码发布在应用程序标记的清单文件中

android:largeHeap="true"
于 2016-07-27T07:53:28.003 回答