2013-04-22 141 views
5

我正在为我们的一个应用程序构建折线图。图表中的线条部分工作正常,但现在我必须用颜色填充线条下方的区域,如下图所示。Android - 在折线图下方填充颜色

enter image description here

我使用这个代码绘制到使用画布位图线。

List<Float> xCoordinates = (List<Float>) coordinates[0]; 
    List<Float> yCoordinates = (List<Float>) coordinates[1]; 

    for (int i = 0; i < xCoordinates.size(); i++) { 
     if (!firstSet) { 
      x = xCoordinates.get(i); 
      y = yCoordinates.get(i); 
      p.moveTo(x, y); 
      firstSet = true; 
     } else { 
      x = xCoordinates.get(i); 
      y = yCoordinates.get(i); 
      p.lineTo(x, y); 
     } 
    } 

    textureCanvas.drawPath(p, pG); 

我需要知道的是什么,是有办法轻松地找到行下面的区域,使其颜色或我将有3点之间,计算每个区域的图形,并用填充颜色?

我不能使用现有的图表库等AchartEngineChartDroidaFreeChart等。

+0

我不知道图表引擎,但其他人。它是否有一个面积图表作为图表类型?如果是这样,只需使用面积图,并在可能的情况下使用不同的颜色格式化上边框,以便在线下方显示一条线和一条填充线。 – teylyn 2013-04-22 09:40:11

回答

6

实测值的溶液

予先涂上梯度,之后我绘线图和通过创建随后的线图,并在结束时关闭它的另一路径擦除所有沿线。之后,我将该区域绘制为透明区域,以消除渐变的顶部。

List<Float> xCoordinates = coordinates.first; 
    List<Float> yCoordinates = coordinates.second; 
    for (int i = 0; i < xCoordinates.size(); i++) { 
     if (!firstSet) { 
      x = xCoordinates.get(i); 
      y = yCoordinates.get(i); 
      linePath.moveTo(x, y); 

      erasePath.moveTo(x, 0); 
      erasePath.lineTo(x, y); 

      firstSet = true; 
     } else { 
      x = xCoordinates.get(i); 
      y = yCoordinates.get(i); 
      linePath.lineTo(x, y); 
      erasePath.lineTo(x, y); 
     } 
    } 

    erasePath.lineTo(getWidth(), y); 
    erasePath.lineTo(getWidth(), 0); 
    erasePath.lineTo(0, 0); 

    getTextureCanvas().drawPath(erasePath, clear); 
    getTextureCanvas().drawPath(linePath, pG); 

结果看起来像这样

enter image description here

另一种方式做,这是为了严格遵循道路和周围的底部边缘剪辑和只是画第二路内的梯度。这会得到相同的结果,但图表上方的所有内容都将保留,不会有任何内容被删除。

+0

感谢您发布您的(伟大的)自己的解决方案,它帮助了我很多! – 2013-07-17 13:51:33

+0

很高兴能帮到您 – Neil 2013-07-18 06:55:58

+0

您可以告诉我完整的源代码来填充折线图下面的颜色吗? – UmAnusorn 2013-11-26 18:29:07