Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 绘制高性能的平滑线图_Android_Canvas_Charts_Rendering_Linegraph - Fatal编程技术网

Android 绘制高性能的平滑线图

Android 绘制高性能的平滑线图,android,canvas,charts,rendering,linegraph,Android,Canvas,Charts,Rendering,Linegraph,我需要在画布渲染中绘制带有点湖的线图。我使用了以下方法来优化性能 避免在onDraw方法中创建对象。 在画布中使用drawLines方法,而不是使用path.moveTo和path.lineTo,因为我的想法是路径总是使用CPU而不是GPU进行渲染。 删除了行反别名。 未设置线条颜色的alpha值。 将HardwareAcceleration设置为true。 使用一些采样算法。 这是我在阅读了一些性能技巧后实际做的,以获得良好的性能,如果你知道如何做得更好,请向我建议 可以使用drawRect代

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

避免在onDraw方法中创建对象。 在画布中使用drawLines方法,而不是使用path.moveTo和path.lineTo,因为我的想法是路径总是使用CPU而不是GPU进行渲染。 删除了行反别名。 未设置线条颜色的alpha值。 将HardwareAcceleration设置为true。 使用一些采样算法。
这是我在阅读了一些性能技巧后实际做的,以获得良好的性能,如果你知道如何做得更好,请向我建议

可以使用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;
  }

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