我要将存在data对象里的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秒。怎么可以让画图速度快些,谢谢画图速度;Canvas

解决方案 »

  1.   

    你确定是canvas.drawBitmap(newbmp, 0, 0, new Paint()); 这个方法需要 5,6s吗?我认为是前面的什么操作耗时,而不是这个方法。你可以测一测。drawBitmap 耗时,应该也是毫秒级的,不会这么慢。
    如果是drawBitmap上面的慢的话,应该把这部分操作放在其他线程上。
      

  2.   

    主要是那个for循环耗时,但不知如何改进
      

  3.   

    主要是那个for循环耗时,但不知如何改进
      

  4.   

    主要是那个for循环耗时,但不知如何改进
      

  5.   

    因为bitmap 本身就是一个 4字节byte 表示一个color的byte 数组。 将2000点,转换成这样的数组。 然后用这个数组构造bitmap。 在drawBitmap
      

  6.   

    自己开辟一块内存先把点画在内存里,再贴到屏幕buffer上。
      

  7.   

    直接在canvas中画图,就不用创建两个 bitmaps:
    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);
    }