尝试在单个滚动网格视图中显示某些壁纸时遇到了一些问题。在我的网格视图中,我有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;
}
}
答案 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
。