私は現在、キャンバスにいくつかのタイルを描画するカスタムビューに取り組んでいます。これらのタイルはいくつかのファイルからロードされ、必要に応じてロードされます。
それらはAsyncTaskによってロードされます。すでにロードされている場合は、キャンバスにペイントされます。これは正常に機能しています!
これらの画像が読み込まれると、AsyncTaskはview.postInvalidate()を起動 します。問題は、view.postInvalidate()を起動するたびにカスタムビューがonDraw(Canvasキャンバス)を起動しないことです。
view.postInvalidateは、画像がロードされたときに初めてonDraw()メソッドを起動し、次にCustomView内のonTouchEventでthis.invalidate()を起動したときにのみ起動します。
ビューがキャンバスを再度描画するかどうかを決定することは可能ですか?ビューを強制的に再描画する方法はありますか?invalidateメソッドは、ビューが再描画を検討する場合はクールであることをビューに伝えると思います-.-
それらの無効化メソッドに制限がある可能性はありますか?
皆さんがこの問題についてもっと知っていることを願っています。
編集:
画像はすべてメインスレッドから実行されるAsyncTaskによってロードされるため、すべてのpostInvalidate()をinvalidate( )に変更しましたが、実行されたinvalidate()がonDraw()メソッドを実行しないという問題があります。view.invalidate()は、元のメソッドをオーバーライドすることで起動されることがわかりました。
@Override
public void invalidate() {
super.invalidate();
Log.d(TAG, "invalidate executed");
}
今どうしたらいいのかわからない。view.invalidate()とview.postInvalidate()を起動していますが、まったく組み合わせて動作するものはありません。