24

私はAndroid開発に不慣れで、について調べていViewます。onDraw(Canvas c)私は既知の2つの方法に出くわしdraw(Canvas c)ます。

これら2つの方法の違いと使用法を教えてください。画像でキャンバスを更新するときに、パフォーマンス(FPS)が向上する方法はどれですか?

4

3 に答える 3

29

それらの間に違いがあります

  1. onDraw (Canvas c)はオーバーライド メソッドであり、ビューがレンダリングされるときに自動的に呼び出されます。ここでは、円、線、または必要なものを作成するなど、追加の描画を行うことができます。

  2. draw(Canvas c)は、このビュー (およびそのすべての子) を指定されたキャンバスに手動でレンダリングするために使用されます。この関数が呼び出される前に、ビューはすでに完全なレイアウトを行っている必要があります。ビューを実装するときは、onDraw(android.graphics.Canvas)このメソッドをオーバーライドする代わりに実装してください。このメソッドをオーバーライドする必要がある場合は、スーパークラス バージョンを呼び出します。

または、簡単に言えば、draw(Canvas c)は、ビューが初めてレンダリングされた後に呼び出すことができるビューの単なる関数です。この関数は、任意のビューでのカスタム描画に使用できます。このビューがレンダリングされるキャンバスを提供する必要があります。また、この関数を呼び出す前に、キャンバス上ですべての描画を行う必要があります。

于 2012-11-30T07:19:27.037 に答える
16

誰かがまだ私のように答えを探していて、見つけられなかったとしたら。

ビューを再描画する必要がある場合、フレームワークによって draw() メソッドが呼び出され、次に draw() メソッドが onDraw() を呼び出してビューのコンテンツを描画します。

void draw(Canvas canvas)
{
     ..... do default stuff (background, layers)
     onDraw(canvas)
     ..... do other stuff ( scroll bars, fading edges, children)

}
于 2014-06-01T01:28:25.193 に答える