別のスレッドでキャンバスに波形をインクリメンタルに描画しようとしています。つまり、スレッドの各ループで、曲線全体を再描画せずに、ハードウェアによって最近取得された部分のみを描画します。
SurfaceHolder.unlockCanvasAndPost
と の間に保持されているキャンバスの内容を信頼できるかどうかはわかりませんSurfaceHolder.lockCanvas
。
ドキュメンテーションはそれについて少し曖昧であるように思われ、私の実験は驚くべき結果をもたらします.描画スレッドの2つの後続のループで返されるキャンバスの「古い」内容は異なります. 2つのキャンバスが交互に使用されているように見えます(ただし、確認しました-同じキャンバスですが、内容が異なります)。
この動作を再現するために私が見つけた最も簡単な方法:
LunarLander サンプル アプリケーションをインポートします。
LunarView.run メソッドで、ループに sleep(500) 命令を挿入します。
LunarView.doDraw メソッドで、次の行をコメント アウトします
canvas.drawBitmap(mBackgroundImage, 0, 0, null);
。これにより、古い内容が消去されます。
ゲームを実行し、船を墜落させます。船の中間位置が表示されますが、点滅します。奇数と偶数の位置が交互に表示されます。
それで、私の質問は次のとおりです。以前に描かれた内容にのみ変更を加えて絵を描くことはできますか?