0

尝试在单个滚动网格视图中显示一些壁纸时遇到了一些问题。在我的网格视图中,我希望用户能够滚动浏览 6 张图像。

我遇到的问题是加载图像时在特定设备上出现“java.lang.OutOfMemoryError”崩溃。该应用程序不会在我自己的手机(Sony Xperia T,800x1280)上崩溃,但在我朋友的手机(Samsung GS2,800 x 480)上崩溃。我尝试加载的图像的分辨率为 1280x800(大小从 200-350kb 不等)。我想我知道如何解决这个问题,但需要帮助解决如何完成它。

有没有办法将图像缩小到用户用来节省内存的设备的相应分辨率?

这是我正在使用的代码,希望有人能给我一些指导。

适配器视图类:

package com.question;

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

public class AdapterViewADV extends BaseAdapter {
private Context mContext;


public Integer[] mThumbIds = {
        R.drawable.Image1,
        R.drawable.Image2,
        R.drawable.Image3,
        R.drawable.Image4,
        R.drawable.Image5,
        R.drawable.Image6

};


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

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

@Override
public Object getItem(int position) {
    return mThumbIds[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(mThumbIds[position]);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setLayoutParams(new GridView.LayoutParams(NO_SELECTION, NO_SELECTION));
    return imageView;
}

}
4

1 回答 1

1
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView = null;
    if(convertView == null){
       imageView  = new ImageView(mContext);imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
       imageView.setLayoutParams(new GridView.LayoutParams(NO_SELECTION, NO_SELECTION));
       convertView = imageView;
    }else{
        imageView = (ImageView)convertView;
    }
    imageView.setImageResource(mThumbIds[position]);

    return convertView;
}

改变你的getView喜欢这样希望这会有所帮助。您也可以搜索使用ViewHoldersin ListView Adapters

于 2013-08-29T17:05:44.170 回答