这是主要方案:KillThemAll Game
在扩展constructor
类的CustomView
的SurfaceView
中,将background
设置为:
this.setBackgroundDrawable(getResources().getDrawable(R.drawable.moon_light));
如果我在
SurfaceHolder.Callback()
的方法之一中设置背景,则游戏和所有动画都会冻结...getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
setBackgroundDrawable(getResources().getDrawable(R.drawable.moon_light));
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
为什么?
最佳答案
在我看来,您只想绘制背景。由于您已经在实现中设置了onDraw()
来制作动画,因此您不应该依赖SurfaceView
方法来绘制图形,因为它们会与自定义图形冲突。
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(background, 0, 0, null); // background replaces canvas.drawColor(Color.BLACK);
// draw your sprites here
}
您只需要确保
View
是大于画布大小的background
。您也可以使用Bitmap
将其缩放到合适的大小,但它不会考虑纵横比。关于android - 我的Surface View 无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21955025/