こんにちは、回転に関して問題があります。現在、キャンバス上にいくつかのオブジェクトを描画しています。現在、この「オブジェクト」は単なるビットマップです。回転を計算してマトリックス内に渡した後、回転させるために新しいビットマップを作成する必要があります。小さなスニペットでこれが明確になります。
public void onDraw(Canvas canvas){
mMatrix = new Matrix();
mMatrix.postRotate(getRotation());
Bitmap rotateBmp = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), mMatrix, true);
canvas.drawBitmap(rotateBmp, mCoords.x -(mBitmap.getWidth() / 2), mCoords.y - ( mBitmap.getHeight() / 2), null);
rotateBmp.recycle();
}
メモリを節約するためにできることは、でrecycleを呼び出すことだけrotateBmp
で、ほとんどの場合正しく実行されます。回転させたいビットマップ「オブジェクト」が10個あると仮定します。つまり、10個のビットマップを「サンプル」として保持し、描画サイクルごとに10個の新しいビットマップと追加の新しいマトリックスを作成する必要があります(「リセット」する方法が見つかりませんでした)。これは私には非常に奇妙に聞こえます。回転の制御を維持しながら、「キャンバスに描画できるもの」をその場で(XMLなしで)作成する別の方法はありますか。どんなアイデアでも大歓迎です。ビュー、Drawable、または別のCustomClassは関係ありません。たぶん、getRotation
描かれるべきすべての「何か」についてすべて同じであることが重要です。それを行うためのベストプラクティスは何ですか?