Ich versuche einen abgerundeten Fortschrittsbalken zu erstellen. Das möchte ich erreichen
Es gibt einen grauen Hintergrundring. Darüber wird ein Fortschrittsbalken mit blauer Farbe angezeigt, der sich in 60 oder einer beliebigen Anzahl von Sekunden auf einer Kreisbahn von 0 auf 360 bewegt.
Hier ist mein Beispielcode.
<ProgressBar
android:id="@+id/ProgressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?android:attr/progressBarStyleLarge"
android:indeterminateDrawable="@drawable/progressBarBG"
android:progress="50"
/>
Dazu erstelle ich im zeichnbaren "progressBarBG" eine Ebenenliste und gebe innerhalb dieser Ebenenliste zwei Elemente wie gezeigt.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/grey" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/blue" />
</shape>
</clip>
</item>
Jetzt wird der erste graue Ring gut erzeugt. Der blaue Ring beginnt jedoch links vom Zeichen und geht nach rechts, genau wie ein linearer Fortschrittsbalken funktioniert. So wird der Fortschritt bei 50% angezeigt, wobei der rote Farbpfeil die Richtung anzeigt.
Ich möchte den blauen Fortschrittsbalken wie erwartet auf einer Kreisbahn verschieben.
quelle
Antworten:
Hier sind meine beiden Lösungen.
Kurze Antwort:
Anstatt ein zu erstellen
layer-list
, habe ich es in zwei Dateien aufgeteilt. Eins fürProgressBar
und eins für seinen Hintergrund.Dies ist die
ProgressDrawable
Datei (Ordner @drawable): Circular_Progress_bar.xmlUnd das ist für seine
background
(@drawable Ordner): circle_shape.xmlUnd am Ende innerhalb des Layouts, an dem Sie arbeiten:
Hier ist das Ergebnis:
Lange Antwort:
Verwenden Sie eine benutzerdefinierte Ansicht, die das erbt
android.view.View
Hier ist das vollständige Projekt auf Github
quelle
setProgress
Methode aufrufen und dann den Wert übergeben. google.com/…android:fromDegrees="270" android:toDegrees="270"
gelöst !! Danke vielmals!Ich habe mit einfachen Weg getan:
Bitte überprüfen Sie den Screenshot auf das gleiche.
CustomProgressBarActivity.java :
activity_custom_progressbar.xml :
custom_progressbar_drawable.xml :
Hoffe das wird dir helfen.
quelle
Ich habe ein detailliertes Beispiel für einen kreisförmigen Fortschrittsbalken in Android hier auf meinem Blog Demonuts.com geschrieben . Dort können Sie auch den vollständigen Quellcode und die Erklärung finden.
Hier ist, wie ich einen kreisförmigen Fortschrittsbalken mit einem Prozentsatz innerhalb des Kreises in reinem Code ohne Bibliothek erstellt habe.
Erstellen Sie zunächst eine zeichnbare Datei mit dem Namen
circular.xml
Nun
activity_main.xml
fügen Sie Folgendes hinzu:In
activity_main.xml
Ich habe ein kreisförmiges Bild mit weißem Hintergrund verwendet, um den weißen Hintergrund um den Prozentsatz herum anzuzeigen. Hier ist das Bild:Sie können die Farbe dieses Bildes ändern, um die benutzerdefinierte Farbe für den prozentualen Text festzulegen.
Fügen Sie nun endlich folgenden Code hinzu
MainActivity.java
:Wenn Sie einen horizontalen Fortschrittsbalken erstellen möchten, folgen Sie diesem Link. Er enthält viele wertvolle Beispiele mit Quellcode:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar
quelle
Ich habe eine Open Source-Bibliothek auf GitHub CircularProgressBar realisiert , die auf einfachste Weise genau das tut, was Sie wollen:
VERWENDUNG
Um eine zirkuläre ProgressBar zu erstellen, fügen Sie CircularProgressBar in Ihr Layout-XML ein und fügen Sie die CircularProgressBar-Bibliothek in Ihren Projektor ein, oder Sie können sie auch über Gradle abrufen:
XML
Sie müssen die folgenden Eigenschaften in Ihrem XML verwenden, um Ihre CircularProgressBar zu ändern.
Eigenschaften:
app:progress
(Ganzzahl) >> Standard 0app:progressbar_color
(Farbe) >> Standard SCHWARZapp:background_progressbar_color
(Farbe) >> Standard GRAUapp:progressbar_width
(Dimension) >> Standard 7dpapp:background_progressbar_width
(Dimension) >> Standard 3dpJAVA
Fork oder Laden Sie diese Bibliothek hier herunter >> https://github.com/lopspower/CircularProgressBar
quelle
Hier ist eine einfache benutzerdefinierte Ansicht für den Fortschritt des Anzeigekreises. Sie können mehr ändern und optimieren, um es für Ihr Projekt geeignet zu machen.
Beispiel mit
xml
Kotlin
Ergebnis
quelle
Ich bin neu, kann also keinen Kommentar abgeben, dachte aber, ich möchte den faulen Fix teilen. Ich verwende auch Pedrams ursprünglichen Ansatz und bin gerade auf dasselbe Lollipop-Problem gestoßen. Aber Alanv in einem anderen Beitrag hatte eine einzeilige Korrektur. Es ist eine Art Fehler oder Versehen in API21. Fügen Sie
android:useLevel="true"
Ihrem Kreis buchstäblich nur xml hinzu. Pedrams neuer Ansatz ist immer noch die richtige Lösung, aber ich dachte nur, ich teile auch die faule Lösung.quelle
Versuchen Sie diese Methode, um eine Bitmap zu erstellen und auf Bildansicht zu setzen.
quelle
https://github.com/passsy/android-HoloCircularProgressBar ist ein Beispiel für eine Bibliothek, die dies tut. Wie Tenfour04 feststellte, muss es etwas benutzerdefiniert sein, da dies nicht sofort unterstützt wird. Wenn sich diese Bibliothek nicht wie gewünscht verhält, können Sie sie aufteilen und die Details ändern, damit sie nach Ihren Wünschen funktioniert. Wenn Sie etwas implementieren, das andere dann wiederverwenden können, können Sie sogar eine Pull-Anfrage senden, um das wieder zusammenzuführen!
quelle
@Pedram, Ihre alte Lösung funktioniert auch in Lollipop einwandfrei (und besser als die neue, da sie überall verwendet werden kann, auch in Remote-Ansichten). Ändern Sie einfach Ihren
circular_progress_bar.xml
Code wie folgt:quelle
quelle
Mit der Material Components Library können Sie die
ProgressIndicator
mit einemWidget.MaterialComponents.ProgressIndicator.Circular.Determinate
Stil verwenden.Etwas wie:
Sie können diese Attribute verwenden:
circularRadius
: Definiert den Radius der kreisförmigen FortschrittsanzeigetrackColor
: Die Farbe, die für die Fortschrittsanzeige verwendet wird. Wenn nicht definiert, wird es auf das gesetztindicatorColor
und dasandroid:disabledAlpha
aus dem Thema angewendet.indicatorColor
: Die einzelne Farbe, die für den Indikator im bestimmten / unbestimmten Modus verwendet wird. Standardmäßig wird die Primärfarbe des Themas verwendetVerwenden Sie
progressIndicator.setProgressCompat((int) value, true);
diese Option, um den Wert im Indikator zu aktualisieren.Hinweis: Es ist mindestens die Version erforderlich
1.3.0-alpha01
.quelle
1.3.0-alpha01
.Veränderung
zu
für die zweite sahpe mit
id="@android:id/progress
hoffe, es funktioniert
quelle