use*_*941 7 scaling android bitmap surfaceview
我试图在机器人上写一个游戏,我照顾不同的屏幕分辨率的方式是我制作一个目标分辨率(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;
}
Run Code Online (Sandbox Code Playgroud)
和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
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
任何人都可以给出一些提示吗?PS如果我只是将位图直接绘制到SurfacView画布上,它就会完美缩放.
小智 4
我将补充 nycynik 和 nikmin 的答案。
您可以利用“createScaledBitmap”函数将位图缩放到屏幕(也就是画布)的大小。尝试使您的位图资源具有相当高分辨率,这样如果在较大的屏幕上使用它,就不会出现难看的缩放伪像。
| 归档时间: |
|
| 查看次数: |
5809 次 |
| 最近记录: |