2

我有一个功能

@Override
public void run() {
    while(running && (!eof)){
        if(surfaceHolder.getSurface().isValid()){
            Canvas canvas = surfaceHolder.lockCanvas();
            paint(canvas);
            surfaceHolder.unlockCanvasAndPost(canvas);  
        }
    }
    thread = null;
}

例如,paint(canvas) 调用一堆绘制图形和文本的其他函数

canvas.drawText("Time="+myRecord.getMyTime(), 100, 100, paint);

我遇到的问题是图形和文本都应该不断变化,它们不会被擦除,而是会不断地绘制自己。难道我的整个画布不应该每次都重新绘制,因为这就是双缓冲与 lock() 和 unlock() 一起工作的方式吗?我没有正确理解这一点吗?我该怎么做?

4

1 回答 1

2

您需要在 lockCanvas() 之后使用 Canvas.drawColor() 自行清除 Canvas。

这也可能是相关的:

在 unlockCanvas() 和 lockCanvas() 之间永远不会保留Surface 的内容,因此,必须写入 Surface 区域内的每个像素。此规则的唯一例外是指定脏矩形时,在这种情况下,将保留非脏像素。

来源

于 2011-08-02T22:14:04.013 回答