我正在开发一个应用程序,其中我使用了GridView,Gridview中的每个图像都有一个小描述,当我们点击任何图像时,我正在显示这个描述,我已经在不同设备上进行了测试,它的工作非常适合MDPI和HDPI设备但是当我在XHDPI设备(高分辨率设备)上测试它时,我出现Out Of Memory错误。
我无法理解问题是什么,这是我的活动: -
GridView gridView = (GridView) findViewById(R.id.grid_view);
// Instance of ImageAdapter Class
gridView.setAdapter(new ImageAdapter(getApplicationContext()));
/**
* On Click event for Single Gridview Item
* */
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
// Sending image id to FullScreenActivity
Intent i = new Intent(getApplicationContext(), TrafficDetails.class);
// passing array index
i.putExtra("id", position);
startActivity(i);
}
});
这是我的ImageAdapter,其中我使用的是可绘制的图像
public Integer[] mThumbIds = {
R.drawable.pic_1, R.drawable.pic_2,
R.drawable.pic_3, R.drawable.pic_4,
R.drawable.pic_5, R.drawable.pic_6,
R.drawable.pic_7, R.drawable.pic_8,
R.drawable.pic_9, R.drawable.pic_10,
R.drawable.pic_11, R.drawable.pic_12,
R.drawable.pic_13, R.drawable.pic_14,
R.drawable.pic_15,R.drawable.pic_16,
R.drawable.pic_17,R.drawable.pic_18,
R.drawable.pic_19,R.drawable.pic_20,
R.drawable.pic_21,R.drawable.pic_22,
R.drawable.pic_23,R.drawable.pic_24,
R.drawable.pic_25,R.drawable.pic_26,
R.drawable.pic_27,R.drawable.pic_28,
R.drawable.pic_29,R.drawable.pic_30,
R.drawable.pic_31,R.drawable.pic_32,
R.drawable.pic_33,R.drawable.pic_34,
R.drawable.pic_35,R.drawable.pic_36,
R.drawable.pic_37,R.drawable.pic_38,
R.drawable.pic_39,R.drawable.pic_40,
R.drawable.pic_41,R.drawable.pic_42,
R.drawable.pic_43,R.drawable.pic_44,
R.drawable.pic_45,R.drawable.pic_46,
R.drawable.pic_47,R.drawable.pic_48,
R.drawable.pic_49,R.drawable.pic_50,
R.drawable.pic_51,R.drawable.pic_52,
R.drawable.pic_53,
};
public String[] str_ary = {
// Description of all images
..................
};
// Constructor
public ImageAdapter(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);
// TextView txt = new TextView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
// txt.setLayoutParams(new GridView.LayoutParams(500, 500));
return imageView;
请帮助我解决这个问题,任何帮助都会很明显......
感谢
答案 0 :(得分:4)
尝试如下:
ImageView imageView = new ImageView(mContext);
// TextView txt = new TextView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(
new GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
Bitmap m_d = BitmapFactory.decodeResource(mContext.getResources(),
mThumbIds[p_position]);
if (m_d != null)
{
Bitmap resizedBitmap = Bitmap.createScaledBitmap(m_d, 100, 100, true);
imageView.setImageBitmap(resizedBitmap);
}
答案 1 :(得分:0)
您可以使用此代码获取位图:
https://stackoverflow.com/a/823966/1168654
您可以使用
处理位图大小final int REQUIRED_SIZE=70;
在下面的链接中,从drawable文件夹获取位图,你必须将两个代码组合起来并在你的app中使用它。
答案 2 :(得分:0)
答案 3 :(得分:0)
这不是你的编码。嗯,但是语法没有错,这是你没有想到并正确计划的方式。 Android会为您的应用分配一定数量的内存,以便在运行时使用。让我们说10MB的RAM(这取决于当前使用的内存量)并且假设您正在尝试加载10张图像,总共需要15MB RAM。 Android通常会尝试为您的应用提供额外的5MB,但并不总能保证。那时Android只会说'内存不足'而你的应用只会崩溃。
请参阅this。