Android: размер растрового изображения превышает бюджет виртуальной машины. Загрузка изображений на холст - PullRequest
0 голосов
/ 10 февраля 2012

Я пытался найти решения в других вопросах, таких как мой, но ничего не смог найти.

Я загружаю кучу изображений на холст. Тем не менее, я получаю java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины. Я использую реальный телефон для тестирования (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. Каждый 5 КБ.

Вот основной код:

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;
}
}

Он работает на моем Nexus One, когда я загружаю только 2 изображения, такие как США и Канада. Не с 3. Я полагаю, чтобы загрузить еще 20 стран, как те. Помогите пожалуйста?

Вот пример изображения canada.png ... Он белого цвета ... если вы выделите его и перетащите, вы увидите изображение ...

enter image description here

1 Ответ

0 голосов
/ 10 февраля 2012

Одним из возможных решений является уменьшение разрешения изображения.К сожалению, нет другой хорошей работы вокруг.

...