关于绘图速度

时间:2013-01-28 09:35:09

标签: android performance canvas drawing

我想绘制保存到数据对象的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秒。

如何更快地提高绘图速度?

1 个答案:

答案 0 :(得分:1)

为什么不直接在画布上画画?它可以节省您创建两个(大)位图:

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()缩放画布的绘图命令。

附加说明:建议不要在paint的draw方法中创建新对象(matrixView,两个大的!位图)。它会导致大量实例创建/删除,从而导致更频繁地激活垃圾收集器(GC),从而导致应用程序出现(巨大的)性能问题!

而是在paint的构造函数中创建一次matrixView对象。