私はAndroid用のペイントアプリケーションを構築しています。SDKで提供されるFingerPaintアプリケーションサンプルを拡張します。ただし、FingerPaintとは異なり、サーフェスに描画するために別のレンダリングスレッドでSurfaceViewを使用しています。これはすべて非常に標準的で簡単です。うまく機能しています。ただ、塗装面に白い背景を付けたいので、まるで白い紙に描いているような感じです。デフォルトの背景は黒色です。サーフェスビューのスレッドは、ビューのonDraw()メソッドを呼び出します。
ここで直面している問題は、SurfaceViewに背景色または背景リソースを設定すると、次回ビューがレンダリングされるときに、この背景がサーフェスの以前の描画を上書きすることです。これを例で説明します。
背景を白色に設定したとします。これで、アプリケーションが起動し、SurfaceViewの色が白になります。わかりました、これまでのところ良いです。今、私は指でこの表面に赤い色の線を描きます。これで、線が白い表面に表示されます。良い。さて、これは絵付けアプリのはずで、車を描きたいとしましょう。そこで、2本目の赤い線を指で描きます。画面に2本目の線が引かれていますが、先ほど描いた1本目の線が消えてしまいます。つまり、SurfaceViewに背景を設定したため、背景が再度描画され、描画された最初の線が上書きされます。これで、画面には2番目に描かれた線だけが表示されます。
明らかに、私はこれが起こらないようにしたいと思います。背景を変更しようとしない場合、コードは完全に機能します(つまり、両方の線がデフォルトの黒い背景に表示され、背景は効果的に表示されません)。しかし、私がいくつかの望ましい背景を設定すると、このことが起こります。毎回描かれるわけではない、どういうわけか静的な背景を持つ方法はありますか?背景を一度だけ描画したいのですが、それ以降の描画はすべてこの背景で行う必要があります。私は、Androidランタイムがビューを描画するたびに背景を描画することを望まないため、以前のレンダリングから、そのビューに存在するすべての描画を上書きします。これを回避する方法はありますか?
これを達成するために私が試したことは次のとおりです。
XMLでandroid:backgroundを使用してSurfaceViewの背景色を設定します。
スタイルの概念を使用して、上記を実行します。(スタイル値を指定し、レイアウトファイルで参照します)。スタイルは、背景色を#FFFFFFFF(白)として定義するだけです。
2のスタイルをSurfaceView(RelativeLayout)の親ビューに設定します。
マニフェストファイルでandroid:themeを使用して、アプリケーション全体に2のスタイルをテーマとして設定します。
SurfaceViewの背景描画可能ファイルを無地の白色の画像に設定します。
コードからSurfaceViewのsetBackgroundColorをthis.setBackgroundColor(Color.WHITE)として呼び出します。
ありがとう。