我了解这个问题被问了几次。解决方案中没有一个是不清楚的。让我解释一下这个问题。
笔记。
让我知道任何解决方案。如果您在使用Android 2.3.3模拟器时遇到类似问题,也请告知我。
[更新]-摘录
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
img_topLeft = (ImageView) findViewById(R.id.Img_Alph_Q_TopLeft);
img_topRight = (ImageView) findViewById(R.id.Img_Alph_Q_TopRight);
img_bottomLeft = (ImageView) findViewById(R.id.Img_Alph_Q_BottomLeft);
img_bottomRight = (ImageView) findViewById(R.id.Img_Alph_Q_BottomRight);
...
}
protected void onResume() {
super.onResume();
img_topLeft.setImageResource(R.drawable.xxx);
img_topRight.setImageResource(R.drawable.xxx);
img_bottomLeft.setImageResource(R.drawable.xxx);
img_bottomRight.setImageResource(R.drawable.xxx);
...
}
谢谢。设法解决它。共享代码以造福他人
解决此问题的自定义类。基于@ Janardhanan.S链接。
public class BitmapResizer {
public static Bitmap decodeImage(Resources res, int id ,int requiredSize){
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, id, o);
//Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE=requiredSize;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale*=2;
}
//decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeResource(res, id, o2);
} catch (Exception e) {
}
return null;
}
}
//Class call
int requiredsize = 100; // Still playing around with this number to find the optimum value
img_topLeft.setImageBitmap(BitmapResizer.decodeImage(getResources(),
AlphResourceSet.R.drawable.xxx, requiredsize));
最佳答案
位图会占用大量内存空间。
不要为您在 Activity 中加载的所有图像创建新的位图变量,
相反,您可以创建一个位图变量并尽可能多地重用它们。
您可以使用此代码段调整位图的大小
http://pastebin.com/D8vbQd2u
关于Android Outofmemory错误位图大小超过2.3.3中的vm预算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5375141/