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