【问题标题】:Draw smooth line graph with high performance高性能绘制平滑折线图
【发布时间】:2014-09-15 04:31:01
【问题描述】:

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

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

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

【问题讨论】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多