J'essaye de créer une barre de progression arrondie. C'est ce que je veux réaliser
Il y a un anneau de fond de couleur grise. En plus de cela, une barre de progression de couleur bleue apparaît qui se déplace dans un chemin circulaire de 0 à 360 en 60 ou n'importe quel nombre de secondes.
Voici mon exemple de code.
<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"
/>
Pour ce faire, dans le "progressBarBG" dessinable, je crée une liste de couches et à l'intérieur de cette liste de couches, je donne deux éléments comme indiqué.
<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>
Maintenant, le premier anneau gris est bien généré. L'anneau bleu commence cependant à partir de la gauche du dessinable et va vers la droite, tout comme le fonctionnement d'une barre de progression linéaire. C'est ainsi qu'il montre à 50% de progression avec la flèche de couleur rouge indiquant la direction.
Je veux déplacer la barre de progression bleue dans un chemin circulaire comme prévu.
la source
Réponses:
Voici mes deux solutions.
Réponse courte:
Au lieu de créer un
layer-list
, je l'ai séparé en deux fichiers. Un pourProgressBar
et un pour son arrière-plan.Il s'agit du
ProgressDrawable
fichier (dossier @drawable): circular_progress_bar.xmlEt c'est pour son
background
(dossier @drawable): circle_shape.xmlEt à la fin, à l'intérieur de la mise en page que vous travaillez:
Voici le résultat:
Longue réponse:
Utilisez une vue personnalisée qui hérite du
android.view.View
Voici le projet complet sur github
la source
setProgress
méthode puis passer la valeur. google.com/...android:fromDegrees="270" android:toDegrees="270"
résolu !! Merci beaucoup!J'ai fait de manière simple:
Veuillez vérifier la capture d'écran pour la même chose.
CustomProgressBarActivity.java :
activity_custom_progressbar.xml :
custom_progressbar_drawable.xml :
J'espère que ceci vous aidera.
la source
J'ai écrit un exemple détaillé sur la barre de progression circulaire sous Android ici sur mon blog demonuts.com . Vous pouvez également y trouver le code source complet et l'explication.
Voici comment j'ai créé une barre de progression circulaire avec un pourcentage à l'intérieur du cercle en code pur sans aucune bibliothèque.
créez d'abord un fichier dessinable appelé
circular.xml
Maintenant dans votre
activity_main.xml
ajout suivant:Dans
activity_main.xml
j'ai utilisé une image circulaire avec un fond blanc pour montrer un fond blanc autour du pourcentage. Voici l'image:Vous pouvez changer la couleur de cette image pour définir une couleur personnalisée autour du texte en pourcentage.
Maintenant, ajoutez enfin le code suivant à
MainActivity.java
:Si vous souhaitez créer une barre de progression horizontale, suivez ce lien, il contient de nombreux exemples précieux avec le code source:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar
la source
J'ai réalisé une bibliothèque Open Source sur GitHub CircularProgressBar qui fait exactement ce que vous voulez de la manière la plus simple possible:
USAGE
Pour créer une ProgressBar circulaire, ajoutez CircularProgressBar dans votre mise en page XML et ajoutez la bibliothèque CircularProgressBar dans votre projecteur ou vous pouvez également la récupérer via Gradle:
XML
Vous devez utiliser les propriétés suivantes dans votre XML pour modifier votre CircularProgressBar.
Propriétés:
app:progress
(entier) >> par défaut 0app:progressbar_color
(couleur) >> par défaut NOIRapp:background_progressbar_color
(couleur) >> par défaut GRISapp:progressbar_width
(dimension) >> par défaut 7dpapp:background_progressbar_width
(dimension) >> 3dp par défautJAVA
Fork ou Téléchargez cette bibliothèque ici >> https://github.com/lopspower/CircularProgressBar
la source
Voici une vue personnalisée simple pour afficher la progression du cercle. Vous pouvez modifier et optimiser davantage pour convenir à votre projet.
Exemple d'utilisation
xml
Kotlin
Résultat
la source
Je suis nouveau, donc je ne peux pas commenter mais j'ai pensé partager le correctif paresseux. J'utilise également l'approche originale de Pedram et je suis juste tombé sur le même problème Lollipop. Mais alanv dans un autre post avait un correctif d'une ligne. C'est une sorte de bogue ou d'oubli dans API21. Littéralement, ajoutez simplement
android:useLevel="true"
à votre cercle de progression xml. La nouvelle approche de Pedram est toujours la bonne solution, mais je pensais juste partager également la solution paresseuse.la source
essayez cette méthode pour créer un bitmap et le définir en vue image.
la source
https://github.com/passsy/android-HoloCircularProgressBar est un exemple de bibliothèque qui fait cela. Comme Tenfour04 l'a déclaré, il devra être quelque peu personnalisé, dans la mesure où cela n'est pas pris en charge directement hors de la boîte. Si cette bibliothèque ne se comporte pas comme vous le souhaitez, vous pouvez la bifurquer et modifier les détails pour qu'elle fonctionne à votre guise. Si vous implémentez quelque chose que d'autres peuvent ensuite réutiliser, vous pouvez même soumettre une requête d'extraction pour la réintégrer!
la source
@Pedram, votre ancienne solution fonctionne également très bien dans Lollipop (et mieux que la nouvelle car elle est utilisable partout, y compris dans les vues distantes), changez simplement votre
circular_progress_bar.xml
code en ceci:la source
la source
Avec la bibliothèque de composants matériels, vous pouvez utiliser
ProgressIndicator
avec unWidget.MaterialComponents.ProgressIndicator.Circular.Determinate
style.Quelque chose comme:
Vous pouvez utiliser ces attributs:
circularRadius
: définit le rayon de l'indicateur de progression circulairetrackColor
: la couleur utilisée pour la piste de progression. S'il n'est pas défini, il sera défini surindicatorColor
et appliquera le àandroid:disabledAlpha
partir du thème.indicatorColor
: la couleur unique utilisée pour l'indicateur en mode déterminé / indéterminé. Par défaut, il utilise la couleur primaire du thèmeUtilisez
progressIndicator.setProgressCompat((int) value, true);
pour mettre à jour la valeur de l'indicateur.Remarque: il nécessite au moins la version
1.3.0-alpha01
.la source
1.3.0-alpha01
.Changement
à
pour le second sahpe avec
id="@android:id/progress
esperons que ça marche
la source