2011-06-21 17 views
4

私のSurfaceViewのonDrawメソッド描画は、タッチイベントによって決定されたパスのLinkedListを画面に表示します。私はLinkedListから最後のパスノードを削除する元に戻す機能を追加します。ボタンがヒットすると、パスはリストから削除されますが、元に戻すボタンを押すか、画面に触れるまで、SurfaceViewは更新されません。Android SurfaceView onDraw質問

おかげで、onDraw()が呼び出されたとき(あなたがそれに触れるように)閲覧のみによる画面の活動にたまたま、更新されているためか、プログラム的にそうすることを余儀なくさだときだ エリック

+0

実際に特定の質問をしたり、関連するコードの一部を表示したり、古い質問の回答を受け入れてみたりすることもできます。 – kabuko

答えて

3

がOnDrawは、スレッド内のすべての60ミリと呼ばれているが、それはそこに私を混乱させる を更新していないのに役立ちます。あなたが使用する必要があります

postInvalidate(); 

ない

invalidate(); 

postInvalidate();は、その次の都合の良い時間に再描画するには、メインUIスレッドに指示します。あなたがそれをやっている方法は、別のスレッドでは動作しません。

0

強制したい:Viewから継承したinvalidate()メソッドを使用します。

SurfaceViewの内部で削除が行われた場合、削除が完了したらinvalidate()と書いてください。それが外で起こる場合は、単にsurfaceViewInstance.invalidate()を実行してください。

ホープこれは

+0

SurfaceView内部でinvalidateを使用しようとしましたが、まだ更新されていません。 OnDrawはスレッド内で60ミリ秒ごとに呼び出されますが、そこでは更新されず、混乱します。 – erversteeg