DrawViewextendsViewを呼び出すアクティビティを作成しました。Canvasにバイナリツリーのようなものを描画します。キャンバスのサイズは画面サイズよりも大きく、onDraw関数は、キャンバスの表示部分だけでなく、すべてのキャンバスを描画します。水平および垂直のscrollViewを追加しましたが、ビューを更新するためにonDrawが何度も呼び出されることは明らかです。onDraw関数を呼び出さなくても、その画像を使用してツリーを表示する画像(ビットマップなど)にキャンバスを描画できるかどうか疑問に思いました。これができない場合、より高速なビューを取得するために何ができますか?
3007 次
2 に答える
4
API 11以降を使用している場合は、マニフェストのアプリケーションタグでハードウェアアクセラレーション属性を使用してみてください。
<application ... android:hardwareAccelerated="true" ...>
それ以外に、View以外のレンダリングの使用を検討することもできますが、SurfaceViewもご覧ください。
一般に、UIコンポーネント(ボタンなど)を構築している場合を除いて、Viewをオーバーライドするべきではないと思いますが、これについては引用しないでください。
于 2012-02-29T16:40:49.673 に答える
1
技術的には、キャンバスはビットマップ上に描画されます。つまり、実際には画面よりも大きいのはビットマップです。なぜビットマップを画面より大きくしているのですか?より大きなビットマップ=より多くのメモリ使用量-これは物事を少し遅くする可能性があります。実際には、画面のクリップされた境界内でのみ描画します。画面から描画していると思うかもしれませんが、そうではありません。別のビットマップを利用しても役に立ちません。すでにそれを行っています。コードを見ずに、次のことを試すことができます。
invalidate(rect)
変更されたものだけを再描画する呼び出しによって、バイナリツリーで変更されたものだけを描画します- 二分木が静的であることが意図されている場合は、そのpng / jpgを作成し、その画像を表示するだけで、すべてを自分で描画するのではありません。
- 必要以上にinvalidateを呼び出していないことを確認してください
于 2012-02-29T16:52:12.617 に答える