将图像缩小到相应的设备

时间:2013-08-29 16:58:09

标签: android imageview out-of-memory

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

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

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

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

AdapterView类:

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;
}

}

1 个答案:

答案 0 :(得分: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,希望这会有所帮助。您还可以在ViewHolders ListView中搜索Adapters