我试图在机器人上编写游戏,我处理不同屏幕分辨率的方式是我制作一个目标分辨率(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画布上,它就可以完美缩放。
答案 0 :(得分:4)
我要加入nycynik和nikmin的答案。
您可以利用'createScaledBitmap'功能将Bitmap缩放到屏幕大小(好吧,画布)。尝试使你的Bitmap资源相当高,以便如果它在更大的屏幕上使用,它将不会有丑陋的缩放工件。