我想绘制保存到数据对象的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秒。
如何更快地提高绘图速度?
答案 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方法中创建新对象(matrix
,View
,两个大的!位图)。它会导致大量实例创建/删除,从而导致更频繁地激活垃圾收集器(GC),从而导致应用程序出现(巨大的)性能问题!
而是在paint
的构造函数中创建一次matrix
和View
对象。