【问题标题】:Draw smooth line graph with high performance高性能绘制平滑折线图
【发布时间】:2014-09-15 04:31:01
【问题描述】:
我需要在画布渲染中绘制带有点湖的线图。我使用了以下方法来优化性能,
- 避免在 onDraw 方法中创建对象。
- 在画布中使用 drawLines 方法而不是使用 path.moveTo 和 path.lineTo,因为我的想法是始终使用 CPU 而不是 GPU 渲染路径。
- 删除了线条抗锯齿功能。
- 未设置线条颜色的 alpha 值。
- 将 HardwareAcceleration 设置为 true。
- 使用一些采样算法。
这是我在阅读了一些性能提示以获得良好性能后实际做的事情,如果您知道要做得更好,请向我提出建议。
【问题讨论】:
标签:
android
canvas
charts
rendering
linegraph
【解决方案1】:
你可以使用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。我不确定硬件加速是否真的有帮助。相反,它可能会导致一些廉价设备出现问题。