绘制高性能的平滑折线图



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

  1. 避免在onDraw方法中创建对象
  2. 在画布中使用drawLines方法,而不是使用path.moveTo和path.lineTo,因为,我认为路径总是使用CPU而不是GPU渲染
  3. 删除了行反别名
  4. 未设置线条颜色的alpha值
  5. 将HardwareAcceleration设置为true
  6. 使用一些采样算法

这是我在阅读了一些性能技巧后实际做的事情,以获得良好的性能,如果你知道要做得更好,请向我建议。

您可以使用drawRect而不是drawLine。然后使用SurfaceView。(老实说,我不喜欢SurfaceView,因为它有一些局限性,我自己也组织后台缓冲区,但大多数开发人员更喜欢它)。

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

假设您有一个由浮点数据组成的表grpData[],每个数据都在0f到1f的范围内。您还有一个颜色表(不是颜色资源ID)grpColors。

他们你的代码将看起来像这样:

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。我不确定硬件加速是否真的有帮助。相反,它可能会导致一些廉价设备出现问题。

最新更新