3

rpmに関するデータを取得するタコを表示する小さなアプリを作成しました... Bluetooth経由で。データが変更されたら、針と他のいくつかの imageViews を回転させて、現在の値を画面に表示します。

コードをローテーションする:

bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(), true);
canvasRpm.setBitmap(bMapRpm);
canvasRpm.save();
canvasRpm.rotate((float)Rpmdegree+(float)Rpmcurrentdegree,bMapRpm.getWidth()/2,bMapRpm.getHeight()/2);
canvasRpm.drawBitmap(bMapNadel,0,0,paint);
canvasRpm.restore();

bMapcanvasBackTacho は単なる透明な背景です。bMapNadel は針のビットマップです。bMapRpm は描画するキャンバスのビットマップです

imageView を更新するには、常に次のように呼び出します。

ivNadel.setImageBitmap(bMapRpm);

コードの一部をコメントアウトして、アプリの速度が低下する原因を調べました。setImageBitmap() をコメントアウトした後、スローダウンが消えました。

誰かが imageView を別の方法で更新する方法を知っていますか、またはそれをより速く動作させるために変更できますか?

thx =)

4

1 に答える 1

3

できることは 2 つあります。まず、更新が必要になるたびに
呼び出しを行わないでください。 次に、 を呼び出します。これにより、何かが変更されたことをビューに通知し、ビットマップを完全に置き換えたときに発生している他のことを更新する必要なく、それ自体を再描画します。copy()BitmapBitmap
invalidate()ImageView

onDraw()最後に、独自の View 実装を作成して、そこでオーバーライドして回転を実行することもできます。

于 2012-04-26T07:28:57.027 に答える