私の SurfaceView の onDraw メソッド draw は、画面上の TouchEvents によって決定されるパスの LinkedList です。LinkedList から最後のパス ノードを削除する元に戻す機能を追加したいと考えています。ボタンを押すと、パスはリストから削除されますが、元に戻すボタンをもう一度押すか画面に触れるまで、SurfaceView は更新されません。
ありがとう、エリック
私の SurfaceView の onDraw メソッド draw は、画面上の TouchEvents によって決定されるパスの LinkedList です。LinkedList から最後のパス ノードを削除する元に戻す機能を追加したいと考えています。ボタンを押すと、パスはリストから削除されますが、元に戻すボタンをもう一度押すか画面に触れるまで、SurfaceView は更新されません。
ありがとう、エリック
OnDraw はスレッドで 60 ミリ秒ごとに呼び出されますが、そこで更新されないため混乱します。
あなたが使用する必要があります:
postInvalidate();
いいえ
invalidate();
postInvalidate();
次に都合のよいときに再描画するようにメイン UI スレッドに指示します。あなたがやっている方法は、別のスレッドでは機能しません。
これは、ビューが onDraw() が呼び出されたときにのみ更新されるためです。これは、画面のアクティビティ (タッチなど) が原因で発生するか、プログラムで強制されたときに発生します。
強制したい場合: View から継承された invalidate() メソッドを使用します。
削除が SurfaceView 内で発生した場合は、削除が完了した後に invalidate() を記述してください。外部で発生した場合は、surfaceViewInstance.invalidate() を実行してください。
お役に立てれば