绘制高性能的平滑线图

时间:2014-09-15 04:31:02

标签: android canvas charts rendering linegraph

我需要在画布渲染中用点湖绘制线图。我使用以下方法来优化性能,

  1. 避免在onDraw方法中创建对象。
  2. 在画布中使用drawLines方法而不是使用path.moveTo和path.lineTo,因为我认为路径总是使用CPU而不是GPU渲染。
  3. 删除了行消除别名。
  4. 未设置线条颜色的Alpha值。
  5. 将HardwareAcceleration设置为true。
  6. 使用一些采样算法。
  7. 这是我在阅读一些性能提示以获得良好性能后实际做的事情,如果你知道要做得更好,请向我建议。

1 个答案:

答案 0 :(得分:0)

您可以使用drawRect代替drawLine。并使用SurfaceView。 (老实说,我不喜欢SurfaceView的一些限制,并自己组织回缓冲,但大多数开发人员更喜欢它。)

这就是我的想法(没有经过测试和思考)。

假设你有一个浮点数据表grpData [],每个数据的范围是0f到1f。你还有一个颜色表(不是颜色资源ID)grpColours。

你的代码看起来像这样:

private Paint p = new Paint();

@Override
public void onDraw(Canvas canvas) {
  super.onDraw(canvas);      // Draws background

  int width = getWidth();
  int height = getHeight();
  int count = grpData.length;
  float xStep = (float) width / count;

  float x=0f; 

   for (int i=0; i<count, i++) {
      float nextX = x+xStep;
      p.setColor(grpColours[i]);
      canvas.drawRect(x, (1f-grpData[i])*height, nextX, height, p);
      x = nextX;
  }

}

PS。我不确定硬件加速真的有帮助。相反,它可能会导致一些廉价设备出现问题。