Масштабирование растрового изображения под размер холста.

Я пытаюсь написать игру на дроиде, я забочусь о разных разрешениях экрана: я делаю растровое изображение с заданным разрешением (320x480), делаю из него холст и нарисуйте все элементы на нем, используя фиксированные координаты, затем я просто рисую это растровое изображение на холсте SurfaceView, и оно масштабируется на разных экранах. Проблема в том, что когда я рисую что-то в своем фрейме, растровое изображение выходит за границы, даже если фрейм имеет тот же размер, что и растровое изображение. (Растровое изображение 320x480, растягивается и не помещается на экране) Вот код:

public class Graphics {

private Bitmap frameBuffer, grid;
private Canvas canvas;

public Graphics(Context context) {

    frameBuffer = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
    canvas = new Canvas(frameBuffer);

    grid = BitmapFactory.decodeResource(context.getResources(),
            R.drawable.grid);
}

public Bitmap present() {
    canvas.drawColor(Color.WHITE);
    canvas.drawBitmap(grid, 0, 0, null);
    return frameBuffer;
}

и класс SurfaceView:

public class GameView extends SurfaceView implements Runnable {

private SurfaceHolder holder;
private Boolean running;
private Thread renderThread;
private Graphics graphics;

public GameView(Context context, Graphics graphics) {
    super(context);
    this.holder = getHolder();
    this.graphics = graphics;
}

public void resume() {
    running = true;
    renderThread = new Thread(this);
    renderThread.start();
}

public void run() {
    Rect dstRect = new Rect();
    while (running) {
        if (!holder.getSurface().isValid())
            continue;

        Bitmap frameBuffer = graphics.present();

        Canvas canvas = holder.lockCanvas();
        canvas.getClipBounds(dstRect);
        canvas.drawBitmap(frameBuffer, null, dstRect, null);
        holder.unlockCanvasAndPost(canvas);
    }
}

public void pause() {
    running = false;
    while (true) {
        try {
            renderThread.join();
            break;
        } catch (InterruptedException e) {
            // retry
        }
    }
}

}

может кто-нибудь дать несколько советов по этому поводу? PS Если я просто нарисую растровое изображение прямо на холст SurfacView, оно отлично масштабируется.

7
задан user924941 13 November 2011 в 22:06
поделиться