2013-04-22 139 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