0

私のアプリケーションは、連続ループでキャンバスに描画し、各ループで描画可能オブジェクトの位置を再評価し、アニメーション化するためにそれらを循環させます。私の質問は、次の2つの方法のどちらが優れているのか、そしてその理由は何ですか?私は初心者なので、メソッドのベンチマーク方法などがわからないので、可能であれば、またはすでに持っている場合は、入力をいただければ幸いです。

最初の方法(私が使用している方法)は、pngリソースにハンドルをDrawableとして割り当てることです。次に、呼び出すオブジェクトを描画するたびに、次のようにします。

Drawable.setBounds(x,y,x,y);
Drawable.draw(canvas);

私の質問は、(コンストラクターで)リソースをBitMapとしてデコードしてから、適切なサイズにスケーリングする方が速いでしょうか。次に、各ループで次の方法でリソースを描画します。

canvas.drawBitmap(DrawableName, 0, 0, null);

私が尋ねる理由は、私のアプリは何百ものリソースを消費するため、いくつかを変更しても違いを区別するのに十分ではないためです。コードをオーバーホールする前に、この方法で実行する方がはるかに高速かどうかを知りたいと思います。とにかく、どうにかしてパフォーマンスを上げる必要があるので、他の良いアイデアも歓迎します。

4

1 に答える 1

1

一般に、ビットマップの描画は、適切な準備の場合のように描画するよりも高速です。ビットマップの描画は、画面にメモリをダンプするだけです。スケーリングされたビットマップを描画する必要がある場合createScaledBitmapは、作成してからスケーリングするのではなく、を使用して1つとして描画します。これは次の方法で実現できます。

Bitmap myBitmap = BitmapFactory.decodeFile(myFile.getPath());
myBitmap = myBitmap.createScaledBitmap(myBitmap, width, height, true);

上記の関数に関するAndroid開発者向けドキュメント

実行中にプリミティブを計算して描画すると計算が必要になり、それらの多くを描画するとパフォーマンスが低下するため、可能な場合はより多くのビットマップを使用しますが、時期尚早の最適化を行う場合は注意が必要です。重要な(つまり、目立つ)パフォーマンスの向上。

于 2011-11-28T19:17:49.797 に答える