【问题标题】:About the drawing speed关于绘图速度
【发布时间】:2013-01-28 09:35:08
【问题描述】:

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

如何让绘图速度更快?

【问题讨论】:

  • 你在data.getData()里做什么?

标签: android performance canvas drawing


【解决方案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() 来缩放画布的绘制命令。

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

相反,在 View 的构造函数中创建一次 paintmatrix 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2020-05-29
    • 2017-06-25
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多