2011-07-11 10 views
2

私はいくつかのタイルを持つシンプルなゲームボードを表すカスタムビューを持っています。私はタイルの現在表示されている画像(画像がない場合は0)を格納する2次元配列を持っています。カスタムビューのonDraw()効率的なデザイン

私のonDraw()の方法の中で、私は配列をループし、タイルの画像を表示します。しかし、私がinvalidate()を呼び出す唯一の時間は、ボードをリセットするときです。他のすべての場所では、更新が必要な必要なタイルについてのみinvalidate(Rect)を呼び出します。

onDraw()のこの実装は効率的にビューを描画しますか?もしそうなら、これを行う良い方法は何でしょうか? (また、 'Rect'領域のみを更新するinvalidate(Rect)の呼び出しを呼び出すことはありませんか?これは、Androidにとっては無視されるかもしれない推奨ですか?)。

この点を明確にしていただければ幸いです。

答えて

0

onDraw()の実装は効率的にビューを描画していますか?

十分です。さもなければ、あなたの図面でハードウェアアクセラレーションを利用するためにOpenGLを学びたいと思っていますが、これはすべてあなたのタイルがフレームごとに変わっているかどうか、またはあなたが持っているタイルの数によって異なります。

また、 'Rect'領域のみを更新するinvalidate(Rect)の保証がありますか?これはAndroidの場合は無視される可能性がありますか?

それはRectエリアを更新し、Infactはロマン・ガイは毎回ホーム画面が更新を必要とする画面全体を更新しないために、デフォルトのホームランチャーアプリケーションのためのinvalidate(Rect)を使用しています。

+1

ありがとうございました。これは、onDraw()がすべてのタイルをループし、それぞれdrawBitmap()を呼び出すとしても、Androidは実際にダーティとマークされた(つまり無効にされた)ものだけを描画することを意味しますか? –

+0

現在の境界(getClipBounds()を使って)がこれらの境界に収まるかどうかを判断し、それらを再描画する必要があると言っていますか(hmm ..どのタイルを決定するかを確認する必要があります) –

+0

20:40以降をご覧ください。http://www.youtube.com/watch?v=N6YdwzAvwOA – Wroclai

関連する問題