0

データオブジェクトに保存する2000点を描きたい。

私は次のコードを使用します:

Bitmap bitmap = Bitmap.createBitmap(2000,100,Config.ARGB_8888);
Canvas canvasTemp=new Canvas(bitmap);
Paint paint=new Paint();
for (int i = 0; i < 2000; i++) {
canvasTemp.drawPoint(i, data.getData(i), paint);
}
   Matrix matrix = new Matrix(); 
    float scaleWidth = ((float) 640 / 2000);   
float scaleHeight = ((float) 480/ 100);   
matrix.postScale(scaleWidth, scaleHeight);   
 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0,2000, 100, matrix, true);   
canvas.drawBitmap(newbmp, 0, 0, new Paint());

この描画速度は遅すぎます。約5〜6秒かかります。

描画速度を速くするにはどうすればよいですか?

4

1 に答える 1

1

キャンバスに直接ペイントしてみませんか?これにより、2つの(大きな)ビットマップを作成する手間が省けます。

Paint paint=new Paint();
Matrix matrix = new Matrix(); 
float scaleWidth = ((float) 640 / 2000);   
float scaleHeight = ((float) 480/ 100);   
matrix.postScale(scaleWidth, scaleHeight);   
canvast.concat(matrix);
for (int i = 0; i < 2000; i++) {
  canvas.drawPoint(i, data.getData(i), paint);
}

concat()キャンバスの描画コマンドを拡大縮小するために使用するだけです。

追記:aのdrawメソッドで新しいオブジェクト(、、 2つの大きな!ビットマップ)を作成paintするmatrixことViewはお勧めしません。その結果、インスタンスの作成/削除が多くなり、ガベージコレクター(GC)がより頻繁にアクティブ化され、アプリケーションで(巨大な)パフォーマンスの問題が発生します。

代わりに、のコンストラクターでpaintandmatrixオブジェクトを1回作成しますView

于 2013-01-28T09:40:50.137 に答える