2012-01-25 8 views
0

私はビュークラスのサブクラスであるコンパスを持っています。私のコンパス針はビットマップです。センサが変化するたびに、コンパスが無効にされ、キャンバスに再描画され、コンパス針の回転も変化します。私が抱えている問題は、コンパス針が回転しているのが少し遅れているのを見ると、基本的には劣悪な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(); 

} 
+0

ビットマップの描画方法を投稿できますか?回転した画像、特に300x300ピクセルの画像を描画するだけであれば、パフォーマンスの問題は発生しません。 SurfaceViewを使用しても、パフォーマンスの問題は解決しません。 – Samuel

+0

コードが追加されました。 – user1163392

+0

SensorManagerに登録する際に、どの程度のレートを使用していますか? SENSOR_DELAY_GAMEまたはSENSOR_DELAY_FASTESTを試してください。遅れがどこから来ているのかもしれない。 – Samuel

答えて

0

ははるかに良い、それはより多くのフレームをレンダリングすることができSurfaceViewスーツこのタスクを使用します毎秒、GLSurfaceViewを使用して、すべてが確実であることを確認することもできますGPUでレンダリングされます。

+0

SurfaceViewは、シンプルなビューを使用したときと同じように、ラグを修正しませんでした。 – user1163392

関連する問題