我了解这个问题被问了几次。解决方案中没有一个是不清楚的。让我解释一下这个问题。

  • 我有一个 Activity ,一次可加载4张图像。
  • 我将图像加载到onResume()方法中。
  • 加载时,“Activity ”引发位图错误。

  • 笔记。
  • 我正在使用setImageResource(R.drawable.xxxx)方法调用来设置图像,而不是直接使用位图/可绘制对象。
  • 图像已正确缩放。
  • 可激活性在2.3之前的所有仿真器中均有效,并且在实际设备(三星Galaxy 5)中工作正常。
  • 第一次初始化时出现错误,并且未触发任何方向更改事件。
  • 图片的尺寸为800 x 600,平均大小为15kb(每张)。

  • 让我知道任何解决方案。如果您在使用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/

    10-14 04:45