Я пытаюсь написать игру для дроида. Я позабочусь о разном разрешении экрана: я делаю растровое изображение с целевым разрешением (320х480), создаю из него холст и рисую все элементы на нем, используя фиксированные координаты,Затем я просто рисую это растровое изображение на холсте 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, оно отлично масштабируется.