我正在开发一个android上的小型测试游戏。我使用SurfaceView在画布上绘图。SurfaceView不会重新粉刷
这是我的问题:只显示一帧,但listener.draw(..)
被调用,因为它应该,所以我的游戏是静止图像。
线程调用draw(..)
每次迭代,但屏幕不更新。
public class GameView extends SurfaceView implements Runnable, SurfaceHolder.Callback {
// ...
@Override
protected void onDraw(Canvas canvas) {
if(alive) { // to prevent drawing if view exists but surface isn't created
// ...
final int savedState = canvas.save();
try {
canvas.clipRect(leftPadding, topPadding, leftPadding + finalWidth, topPadding + finalHeight);
canvas.translate(leftPadding, topPadding);
canvas.scale(scaleFactor, scaleFactor);
if(listener != null)
listener.draw(this, canvas);
} finally {
canvas.restoreToCount(savedState);
}
}
}
// ...
@Override
public void run() {
alive = true;
while(alive) {
if(!holder.getSurface().isValid())
continue;
long currentFrameStart = System.currentTimeMillis();
deltaFrameTime = currentFrameStart - lastFrameStart;
lastFrameStart = currentFrameStart;
listener.update(this, deltaFrameTime);
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
synchronized(holder) {
draw(canvas);
}
} finally {
if(canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
try {
Thread.sleep(10);
} catch(InterruptedException e) {
// ...
}
}
}
// ...
}
您好,我目前正在研究类似的东西,并且使用您的'postInvalidate()'解决方案来解决它,但我不确定如果使用它,您会“要求”Android框架重新绘制视图。这不是我正在寻找的东西(我需要快速重绘),因此我使用了'onDraw()'方法,但它没有吸引我......我越来越绝望,我真的不知道在哪里因为'onDraw()'里面的代码已经运行了,但是结果似乎没有被“渲染”:l – JorgeGRC
@ Jorge33212我不记得了,但我认为那是我的问题。我在Android开发方面并不是很有经验,所以只有一点机会我可以帮忙,对不起。 – kelunik
只好试试看:P。反正谢谢你的回复:) – JorgeGRC