Android SDK не будет загружать файл как растровое изображение ... как это исправить? - PullRequest
0 голосов
/ 10 октября 2011

Я читал книгу Марио Зехнера «Начинающие игры для Android», и у него есть пример, связанный здесь в коде Google.

http://code.google.com/p/beginning-android-games/source/browse/trunk/ch04-android-basics/src/com/badlogic/androidgames/BitmapTest.java

Когда я запускал этотон просто отключился и сказал, что Main Activity неожиданно отключилась.

Когда я запускал hello world, SDK работал просто отлично, но я не уверен, с чего начать.

Уровень Android 2.2 API8 - это устройство, которое я выбрал, поскольку это то, что есть в моем телефоне.

Вот код, который я пытался запустить.

import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends Activity {
    class RenderView extends View {
        Bitmap bob565;
        Bitmap bob4444;
        Rect dst = new Rect();

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

            try {
                AssetManager assetManager = context.getAssets();
                InputStream inputStream = assetManager.open("helmet.png");
                bob565 = BitmapFactory.decodeStream(inputStream);
                inputStream.close();
                Log.d("BitmapText",
                        "bobrgb888.png format: " + bob565.getConfig());

                inputStream = assetManager.open("helmet.png");
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Bitmap.Config.ARGB_4444;
                bob4444 = BitmapFactory
                        .decodeStream(inputStream, null, options);
                inputStream.close();
                Log.d("BitmapText",
                        "bobargb8888.png format: " + bob4444.getConfig());

            } catch (IOException e) {
                // silently ignored, bad coder monkey, baaad!
            } finally {
                // we should really close our input streams here.
            }
        }

        protected void onDraw(Canvas canvas) {
            dst.set(50, 50, 350, 350);
            canvas.drawBitmap(bob565, null, dst, null);
            canvas.drawBitmap(bob4444, 100, 100, null);
            invalidate();
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(new RenderView(this));
    }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2011

Способ AssetManager не работает. Поэтому я попробовал следующий метод, и это сработало для меня.

public Bitmap getImage(String location) {
        InputStream is = RenderView.class.getResourceAsStream(location);
        return BitmapFactory.decodeStream(is);
}

RenderView - это просто текущий класс ... поэтому, если вы пишете этот код в Main.java, вы должны написать:

Main.class.getResourcesAsStream();

location - это просто путь к файлу. Например, если у вас есть изображение с именем ball.jpg в папке с изображениями, вы просто напишите:

String location = "images/ball.png";
0 голосов
/ 10 октября 2011

О, дорогой, пожалуйста, поместите helmet.png изображение в каталог assets проекта ....

Этот код полностью работает! Единственная проблема может существовать в том, что helmet.png not found

...