2013-04-22 18 views
5

Buduję wykres liniowy dla jednej z naszych aplikacji. Część liniowa na wykresie działa dobrze, ale teraz muszę wypełnić obszar poniżej linii kolorem, coś jak ten obrazek poniżej.Android - Kolor wypełnienia poniżej wykresu liniowego

enter image description here

używam tego kodu, aby narysować linię na bitmapę używając płótna.

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

Co muszę wiedzieć, czy istnieje sposób, aby łatwo znaleźć obszar poniżej linii i sprawiają, że kolor albo będę musiał obliczyć każdy obszar pomiędzy 3 punkty na wykresie i wypełnić go z kolor?

Nie mogę korzystać z istniejących bibliotek wykres jak AchartEngine, ChartDroid, aFreeChart ect.

+0

Nie znam tego silnika, ale innych. Czy ma on wykres warstwowy jako typ wykresu? Jeśli tak, po prostu użyj wykresu warstwowego i, jeśli to możliwe, sformatuj górną granicę za pomocą innego koloru, aby uzyskać wygląd linii i wypełnienia poniżej linii. – teylyn

Odpowiedz

6

znalazł rozwiązanie

raz pierwszy malowane gradient po że malowane wykres liniowy i usuwane wzdłuż linii, tworząc inną drogę, którą następnie wykres liniowy i zamknął się na końcu. Potem pomalowałem obszar przezroczysty, aby usunąć górną część gradientu.

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

Wynik wyglądało to

enter image description here

Innym sposobem na to jest podążać ścieżką dokładnie clip wokół dolnej krawędzi i po prostu malować gradient wewnątrz drugiej ścieżce. Da to ten sam wynik, ale cała zawartość powyżej wykresu zostanie zachowana i nic nie zostanie usunięte.

+0

Dzięki za opublikowanie twojego (świetnego) własnego rozwiązania, pomogło mi to bardzo! –

+0

Cieszę się, że mogę pomóc – Neil

+0

Czy możesz pokazać mi pełny kod źródłowy, aby wypełnić kolor poniżej wykresu liniowego? – UmAnusorn

Powiązane problemy