私はビュークラスのサブクラスであるコンパスを持っています。私のコンパス針はビットマップです。センサが変化するたびに、コンパスが無効にされ、キャンバスに再描画され、コンパス針の回転も変化します。私が抱えている問題は、コンパス針が回転しているのが少し遅れているのを見ると、基本的には劣悪なfpsです。私はキャンバスを描画する代わりにサーフェイスビューを使用する場合は、実際に描画する代わりにビットマップを常に再描画していて、貧弱なfpsがなくなるかどうか疑問に思うので、遅れていると思っています。これを解決する方法についてのヒントは非常に高く評価されます。画像は300x300ピクセルです。主な活動でAndroidグラフィック
センサー:
@Override
public void onSensorChanged(SensorEvent event) {
float[] v = event.values;
north = v[0];
comp.setNorth(-v[0]);
}
コンパスビュー:
public void setNorth(float n) {
north_changed = true;
north = n;
invalidate();
}
描画ビットマップ:
private void drawCompass(Canvas canvas) {
canvas.save();
if (north_changed == true) {
canvas.rotate(north);
}
float maxwidth = (float) (canvasBitmap.getWidth() * Math.sqrt(2));
float maxheight = (float) (canvasBitmap.getHeight() * Math.sqrt(2));
float ratio = Math.min(w/maxwidth, h/maxheight);
int width = (int) (canvasBitmap.getWidth() * ratio);
int height = (int) (canvasBitmap.getHeight() * ratio);
canvas.drawBitmap(compTexture, new Rect(0, 0, compTexture.getWidth(),
compTexture.getHeight()), new Rect(-width/2, -height/2,
width/2, height/2), facePaint);
canvas.restore();
}
ビットマップの描画方法を投稿できますか?回転した画像、特に300x300ピクセルの画像を描画するだけであれば、パフォーマンスの問題は発生しません。 SurfaceViewを使用しても、パフォーマンスの問題は解決しません。 – Samuel
コードが追加されました。 – user1163392
SensorManagerに登録する際に、どの程度のレートを使用していますか? SENSOR_DELAY_GAMEまたはSENSOR_DELAY_FASTESTを試してください。遅れがどこから来ているのかもしれない。 – Samuel