2015-08-06 13 views
9
ist

Um Kreise und Kreisdiagramme in Android zu zeichnen, können wir das AChartEngine Android-Framework wie gezeigt here verwenden.Zeichnen Kreis, der horizontal in Android

Wie können wir jedoch Kreise zeichnen, die in Android teilweise horizontal (oder vertikal) gefüllt sind? Ich meine Kreise, die zB von unten nach oben entsprechend dem in Java-Code angegebenen Prozentsatz gefüllt werden. Hier

ist eine Vorschau von dem, was wir brauchen:

Preview

+3

Ich habe ein Beispiel für eine Art und Weise, das zu tun in [meine Antwort hier] (http://stackoverflow.com/questions/2458531/filling-a-circle-gradual-from-bottom-to-top-android). Eigentlich zwei Möglichkeiten, wenn Sie den Überarbeitungsverlauf für den ersten Post überprüfen. Meine erste Antwort funktioniert jedoch nur in API 19 und höher. –

+1

Ihre Antwort ist besser und so einfach (eine Nutzungsklasse). Danke @MikeM. – Omar

Antwort

7

Versuchen Sie, diese lib Circle Progress.
Hier ist ein Beispiel von lib des Autors:

<com.github.lzyzsd.circleprogress.CircleProgress 
    android:id="@+id/circle_progress" 
    android:layout_marginLeft="50dp" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    custom:circle_progress="20"/> 

circle

+0

Ich finde einige Schwierigkeiten, diesen lib/code zu implementieren und erfolgreich auszuführen. Diese Lib ist jedoch detailliert und bietet viele Möglichkeiten für Fortschrittsformen in Android. Danke @Minhtdh. – Omar

0

Drawable verlängern und Ihre draw Methode wie folgt aussehen lassen:

public void draw(Canvas c) { 
    float size = ...; // The size of your circle 
    Paint color = new Paint(); 
    color.setColor(...); // Color of your circle 
    c.drawCircle(size/2, size/2, size/2, color); 
    Path p = new Path(); 
    float ratio = ...; // How many of the circle you want to have filled 
    float offset = size * (float) Math.sqrt(1-((double) (0.5-ratio) * 2)*((double) (0.5-ratio) * 2))/2; 
    float angle = (float) Math.asin((double) (0.5-ratio) * 2); 
    p.addArc(offset, size * (1-percent), size - offset, size, angle, Math.PI - angle); 
    p.close(); 
    c.drawPath(p, color); 
}