2013-04-22 5 views
5

Ich baue ein Liniendiagramm für eine unserer Anwendungen. Der Linienteil im Diagramm funktioniert gut, aber jetzt muss ich den Bereich unterhalb der Linie mit einer Farbe füllen, etwa so wie dieses Bild unten.Android - Füllen Sie die Farbe unter dem Liniendiagramm

enter image description here

ich diesen Code bin mit der Linie auf eine Bitmap mit einer Leinwand zu zeichnen.

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); 

Was ich wissen muß, ist es eine Möglichkeit, auf einfache Weise den Bereich unterhalb der Linie zu finden und ihm eine Farbe zu machen oder muß ich jeden Bereich zwischen 3 Punkten für das Graphen zu berechnen, und füllen Sie es mit einem Farbe?

Ich kann nicht vorhandenen Diagramm-Bibliotheken wie AchartEngine verwenden, ChartDroid, aFreeChart ect.

+0

Ich kenne diese Diagramm-Engine nicht, aber andere. Hat es ein Flächendiagramm als Diagrammtyp? Wenn ja, verwenden Sie einfach das Flächendiagramm und, wenn möglich, formatieren Sie den oberen Rand mit einer anderen Farbe, um das Aussehen einer Linie und einer Füllung unterhalb der Linie zu erhalten. – teylyn

Antwort

6

eine Lösung gefunden

I die Gradienten zuerst lackierte, nachdem ich das Liniendiagramm lackierte und gelöscht entlang der Linie, die durch eine anderen Weg zu schaffen, die das Liniendiagramm gefolgt und es geschlossen am Ende auf. Danach malte ich den Bereich transparent, um den oberen Teil des Farbverlaufs zu löschen.

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); 

Das Ergebnis sah wie folgt aus

enter image description here

Ein anderer Weg, dies zu tun, ist es, den Weg genau und Clip um die unteren Kanten zu folgen und nur das Gefälle innerhalb des zweiten Pfad zu malen. Dies ergibt das gleiche Ergebnis, aber der gesamte Inhalt über dem Diagramm wird beibehalten und nichts wird gelöscht.

+0

Vielen Dank für Ihre (großartige) eigene Lösung, es hat mir sehr geholfen! –

+0

Ich bin froh, dass ich helfen konnte – Neil

+0

Können Sie mir bitte den vollständigen Quellcode zeigen, um Farbe unter dem Liniendiagramm zu füllen? – UmAnusorn