内存不够的异常使用自定义的GridView [英] Out Of Memory Exception with custom GridView
问题描述
我有这个$ C $自定义网格视图的c和每个我尝试运行它时,它崩溃所造成的 OutOfMemoryException异常
。我想解决的办法就是调整图像阵列中...
I have this code of a custom grid view and each time I try to run it, it crashes caused by an OutOfMemoryException
. I guess the solution is to resize the images in the array ...
主要活动code
public class AndroidGridLayoutActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
GridView gridView = (GridView) findViewById(R.id.grid_view);
// Instance of ImageAdapter Class
gridView.setAdapter(new ImageAdapter(this));
/**
* 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(), FullImageActivity.class);
// passing array index
i.putExtra("id", position);
startActivity(i);
}
});
}
}
图像适配器code
public class ImageAdapter extends BaseAdapter {
private Context mContext;
// Keep all Images in array
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
};
// 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);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
return imageView;
}
}
全屏code
public class FullImageActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full_image);
// get intent data
Intent i = getIntent();
// Selected image id
int position = i.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
imageView.setImageResource(imageAdapter.mThumbIds[position]);
}
}
任何建议,请??
any advice please??
推荐答案
ESP为..loading图像在的GridView
:< BR>
您可以使用 inSampleSize
来加载所有的图像和由原始的全1含义视图部分可见的更换可见光图像,动态加载图像,而不必将 inSampleSize
为 BitmapFactory
和选项
。
Esp for "..loading the images in a GridView
:
you can use inSampleSize
to load all images and replace the visible images by the original ones- meaning for the view part that are visible, dynamically load images without the inSampleSize
for the BitmapFactory
and its Options
.
根据不同的设备加载图像,而无需面对内存的问题你可以扩展他们失望。 在你的情况,有些手机可能不出现相同的行为在第一次运行,但最终,没有处理优化的图像加载的解决方案,应用程序会崩溃。
You could scale them down depending on different devices to load the images without facing a memory problem. In your case, some phones may not exhibit the same behavior on the first run, but eventually, without handling an optimized image loading solution, app will crash.
在加载主题的缩小版到内存中。
http://developer.android.com/training/displaying-bitmaps/load -bitmap.html
内存不足的错误的Android
Topic under Load a Scaled Down Version into Memory.
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Out of memory error android
在如何避免它们:
<一href="http://stackoverflow.com/questions/19151719/how-to-avoid-out-of-memory-error-while-using-bitmap-in-android">how避免内存不足的错误,而在Android的使用位图
On how to avoid them:
how to avoid out of memory error while using bitmap in android
有关概述:
的http://blogs.innovationm.com/android-out-of-memory-error-causes-solution-and-best-practices/
http://android-developers.blogspot.de/2009/01 /avoiding-memory-leaks.html
For an overview:
http://blogs.innovationm.com/android-out-of-memory-error-causes-solution-and-best-practices/
http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html
在设置绘制为背景,为您的ImageView的,即:
Before setting a drawable as the background for your imageview, i.e.:
iv.setBackgroundResource(R.drawable.image);
获取缩放位图或尝试其他选项,如 inSampleSize
,做检查怎么您的解决方案会影响图像的质量了。
Get a scaled bitmap or try other options like inSampleSize
, do check how your solution affects the quality of your image too.
有关评论:
Bitmap drawableImage=BitmapFactory.decodeResource(context.getResources(),R.drawable.image);
Bitmap bitmap = Bitmap.createScaledBitmap(drawableImage, width, height, false);
Drawable drawableScaled = new BitmapDrawable(context.getResources(), bitmap);
这篇关于内存不够的异常使用自定义的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!