1

私は最近Androidに問題がありました: Unconnの助けを借りて解決された中心の周りの画像の回転。

ただし、このソリューションは、機能しているだけでなく、RotateAnimationのものよりもはるかにパフォーマンスが劣っています。

これまでのところ:1)2つのImageViewが重なり合ったFrameLayout 2)測定された見出しに従って下のビューを移動するSensorEventHandler。RotateAnimationを使用する場合、これは許容範囲内で機能します

スピードを上げてアニメーションを少しスムーズにしたかったのですが、劇的に失敗しました。現在の解決策は次のとおりです。1)個別のスレッドを使用し、レイヤーの描画を制御するSurfaceView 2)以下のコードを実行しないと、スレッドは約50fpsに達する可能性があります。3)以下のコードでは、フレームレートが5ps以下に低下するため、非常にスムーズなものではなくなります...

コードは次のとおりです。

mRadar:以前のリソースからロードされた「レーダー」を示すビットマップmHeading:センサーから取得された現在の方位(度単位)mRadarW、mRadarH:作成時に決定された画像の初期幅/高さ

        Matrix m = new Matrix();
        m.setRotate(mHeading, mRadarW/2, mRadarH/2);
        Bitmap rotated_radar = Bitmap.createBitmap(mRadar, 0, 0, mRadarW, mRadarH, m, true);
        canvas.drawBitmap(rotated_radar, (mRadarW - rotated_radar.getWidth())/2, (mRadarH - rotated_radar.getHeight())/2, null);
        canvas.drawBitmap(mRadar, 0, 0, null);

Matrix / drawBitmapのものはそれほど良くないことが知られていますか、実際にはRotateAnimationよりも悪いですか?これを使用する機会がない場合:どのようなオプションを提案できますか?今のところRotateAnimationは機能しますが、RotateAnimationに行く前に、もっと複雑な画像を作成する必要があるので、drawBitmapや友達と一緒にまた緩むのではないかと心配しています...

ああ、私はCALayersが恋しいです:)

4

1 に答える 1

2

これは非常に高速です。

canvas.save(); //save the position of the canvas
canvas.rotate(angle, X + (ballW / 2), Y + (ballH / 2)); //rotate the canvas
canvas.drawBitmap(ball, X, Y, null); //draw the ball on the rotated canvas
canvas.restore(); //"rotate" the canvas back so that it looks like the ball has rotated   

私は素敵な32ビットのpng画像を使用しているので、フィルターやアンチエイリアスペイントは必要ありません...このスプライトにはどのような画像を使用しますか?

于 2011-03-03T21:05:07.807 に答える