我正在開發一個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