【问题标题】:Android: bitmap size exceeds VM budget. Loading images into a canvasAndroid:位图大小超出 VM 预算。将图像加载到画布中
【发布时间】:2012-03-03 06:56:38
【问题描述】:

我试图在像我这样的其他问题中找到解决方案,但一无所获。

我正在将一堆图像加载到画布中。但是,我收到 java.lang.OutOfMemoryError: bitmap size超出 VM 预算。我正在使用真正的手机进行测试(Nexus One)。应用程序崩溃。它在我的 Samsung Vibrate 上运行良好。

这是我的代码:

CustomDrawableView.java

package com.images.testimage;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.view.View;

public class CustomDrawableView extends View {
private Drawable canada;
private Drawable usa;
private Drawable mexico;

public CustomDrawableView(Context context) {
    super(context);


    Resources res = context.getResources();
    canada = res.getDrawable(R.drawable.canada);
    canada.setBounds(0, 0, 0 + canada.getMinimumWidth(), 0 + canada.getMinimumHeight());

    usa = res.getDrawable(R.drawable.usa);
    usa.setBounds(0,0,usa.getMinimumWidth(),
            usa.getMinimumHeight());

    mexico = res.getDrawable(R.drawable.mexico);
    mexico.setBounds(0,0,mexico.getMinimumWidth(),
            mexico.getMinimumHeight());
}

protected void onDraw(Canvas canvas) {
    canada.draw(canvas);
    usa.draw(canvas);
    mexico.draw(canvas);
}
}

加拿大、美国和墨西哥是 png。每个是 5kb。

主要代码如下:

TestImageActivity.java

package com.images.testimage;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;

public class TestImagesActivity extends Activity {

/** Called when the activity is first created. */

CustomDrawableView mCustomDrawableView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mCustomDrawableView = new CustomDrawableView(this);
    setContentView(mCustomDrawableView);
    setRequestedOrientation(0);

}


@Override
protected void onDestroy() {
    super.onDestroy();
}

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    return true;
}
}

当我只加载 2 张图片(如美国和加拿大)时,它可以在我的 Nexus One 上运行。不是 3。我想再加载 20 个这样的国家。请帮忙?

这是一个示例 canada.png 图像...它是白色的...如果您突出显示并拖动它,您将看到该图像...

【问题讨论】:

  • -1 ...这个问题一周被问5次...
  • -1 同意 selvin.u 从不检查 SO。
  • 双重同意。这就是搜索的简单程度:stackoverflow.com/… 这将返回大约 5000 个结果
  • 你的图片很大,大部分都是空白。在不浪费所有空间的情况下创建新图像怎么样?
  • 是的,伙计们可能是个骗子,但什么是骗子?如何使用那个标记按钮并做一些有建设性的事情,而不是因为它是多么“欺骗”而大吃一惊。 ://

标签: android android-ndk drawable android-canvas out-of-memory


【解决方案1】:

一种可能的解决方案是降低图像分辨率。不幸的是,没有其他好的解决方法。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 2012-08-19
    • 2013-01-02
    • 2010-12-29
    • 2010-12-07
    • 2010-12-29
    相关资源
    最近更新 更多