2013-04-22 23 views
5

Sto costruendo un grafico a linee per una delle nostre applicazioni. La parte della linea nel grafico sta funzionando bene, ma ora devo riempire l'area sotto la linea con un colore, qualcosa di simile a questa immagine qui sotto.Android - Riempi colore sotto il grafico a linee

enter image description here

Sto usando questo codice per disegnare la linea a una bitmap utilizzando una tela.

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

Che cosa ho bisogno di sapere è: esiste un modo per trovare facilmente la zona sotto la linea e ne fanno un colore o dovrò per calcolare ogni area compresa tra 3 punti per il grafico e riempirlo con un colore?

non posso usare le librerie grafico esistente come AchartEngine, ChartDroid, aFreeChart ect.

+0

Non conosco il motore grafico, ma altri. Ha un grafico ad area come tipo di grafico? Se è così, basta usare il grafico ad area e, se possibile, formattare il bordo superiore con un colore diverso, per darti l'aspetto di una linea e un riempimento sotto la linea. – teylyn

risposta

6

trovato una soluzione

ho dipinto il gradiente, dopo che ho dipinto la linea grafica e cancellato tutta la linea creando un altro percorso che ha seguito la linea grafica e chiuso fino alla fine. Successivamente ho dipinto l'area trasparente per cancellare la parte superiore del gradiente.

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

Il risultato sembrava questo

enter image description here

Un altro modo per farlo è seguire il percorso esattamente e clip intorno ai bordi inferiori e solo dipingere il gradiente all'interno del secondo percorso. Questo darà lo stesso risultato ma tutto il contenuto sopra il grafico verrà mantenuto e nulla verrà cancellato.

+0

Grazie per aver postato la tua (fantastica) soluzione, mi ha aiutato molto! –

+0

Contento di aver potuto aiutare – Neil

+0

Potete per favore mostrarmi il codice sorgente completo per riempire il colore sotto il grafico a linee? – UmAnusorn

Problemi correlati