Comment créer une barre de progression circulaire dans Android qui tourne dessus?

154

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.

entrez la description de l'image ici

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.

entrez la description de l'image ici

Je veux déplacer la barre de progression bleue dans un chemin circulaire comme prévu.

Saurav Srivastava
la source
9
Je ne sais pas pourquoi vous avez été rejeté, cela semble un peu injuste.
BenjaminPaul
1
J'ai regardé avant de poster cette question. J'ai trouvé des réponses mais elles n'ont pas fonctionné pour ce que j'essaie de réaliser. Peut-être que quelqu'un m'a rejeté en pensant qu'il s'agissait d'un article en double.
Saurav Srivastava
1
peut-être que cela peut vous orienter dans la bonne direction github.com/grmaciel/two-level-circular-progress-bar
gmemario
1
vous pouvez utiliser cette bibliothèque github.com/emre1512/CircleProgressBar
Zapdos
1
Voudriez-vous s'il vous plaît récompenser l'une des personnes généreuses qui ont essayé de trouver une solution pour vous pour ses efforts considérables en acceptant l'une des réponses fournies?
CEO tech4lifeapps

Réponses:

324

Voici mes deux solutions.

Réponse courte:

Au lieu de créer un layer-list, je l'ai séparé en deux fichiers. Un pour ProgressBaret un pour son arrière-plan.

Il s'agit du ProgressDrawablefichier (dossier @drawable): circular_progress_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->

        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

Et c'est pour son background(dossier @drawable): circle_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="2.5"
    android:thickness="1dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

Et à la fin, à l'intérieur de la mise en page que vous travaillez:

<ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:indeterminate="false"
        android:progressDrawable="@drawable/circular_progress_bar"
        android:background="@drawable/circle_shape"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:progress="65" />

Voici le résultat:

résultat 1

Longue réponse:

Utilisez une vue personnalisée qui hérite du android.view.View

résultat 2

Voici le projet complet sur github

M. Reza Nasirloo
la source
@Pedram Comment définir le pourcentage de la barre de progression? Comme par exemple, actuellement il avait 50%. Comment dois-je définir le 50% de la barre de progression?
@ 20 Cents, Lisez la documentation, vous devriez obtenir une référence à votre barre de progression et appeler sa setProgressméthode puis passer la valeur. google.com/...
M. Reza Nasirloo
Je suis devenu fou en essayant de trouver les valeurs correctes, des dizaines rouges de sujets de stackoverflow, seulement pour trouver la solution ici .. android:fromDegrees="270" android:toDegrees="270"résolu !! Merci beaucoup!
Henrique de Sousa
@Skynet Oui, et je n'ai pas essayé de le réparer car je préfère en créer un entièrement personnalisé en étendant la classe View developer.android.com/training/custom-views/index.html
M. Reza Nasirloo
1
@MimArmand Hé merci, En fait, il recommence à fonctionner dans la mise à jour Lollipop 5.1, Et cette ligne corrige le problème pour l'api 21.
M. Reza Nasirloo
23

J'ai fait de manière simple:

Veuillez vérifier la capture d'écran pour la même chose.

CustomProgressBarActivity.java :

public class CustomProgressBarActivity extends AppCompatActivity {

    private TextView txtProgress;
    private ProgressBar progressBar;
    private int pStatus = 0;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_progressbar);

        txtProgress = (TextView) findViewById(R.id.txtProgress);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (pStatus <= 100) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setProgress(pStatus);
                            txtProgress.setText(pStatus + " %");
                        }
                    });
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    pStatus++;
                }
            }
        }).start();

    }
}

activity_custom_progressbar.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.skholingua.android.custom_progressbar_circular.MainActivity" >


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/custom_progressbar_drawable"
            android:secondaryProgress="0" />


        <TextView
            android:id="@+id/txtProgress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/progressBar"
            android:layout_centerInParent="true"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </RelativeLayout>



</RelativeLayout>

custom_progressbar_drawable.xml :

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-90"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="270" >

    <shape
        android:shape="ring"
        android:useLevel="false" >
        <gradient
            android:centerY="0.5"
            android:endColor="#FA5858"
            android:startColor="#0099CC"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

J'espère que ceci vous aidera.

Hiren Patel
la source
Salut Hiren, j'essaye d'afficher seulement deux couleurs dans la vue. Rouge et vert. Mais je vois aussi un mélange de rouge et de vert dans le cercle. Comment puis-je supprimer cela?
Lokesh Pandey
20

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.

entrez la description de l'image ici

créez d'abord un fichier dessinable appelé circular.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/secondaryProgress">
        <shape
            android:innerRadiusRatio="6"
            android:shape="ring"
            android:thicknessRatio="20.0"
            android:useLevel="true">


            <gradient
                android:centerColor="#999999"
                android:endColor="#999999"
                android:startColor="#999999"
                android:type="sweep" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="270"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="270">

            <shape
                android:innerRadiusRatio="6"
                android:shape="ring"
                android:thicknessRatio="20.0"
                android:useLevel="true">


                <rotate
                    android:fromDegrees="0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:toDegrees="360" />

                <gradient
                    android:centerColor="#00FF00"
                    android:endColor="#00FF00"
                    android:startColor="#00FF00"
                    android:type="sweep" />

            </shape>
        </rotate>
    </item>
</layer-list>

Maintenant dans votre activity_main.xml ajout suivant:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dialog"
    tools:context="com.example.parsaniahardik.progressanimation.MainActivity">

    <ProgressBar

        android:id="@+id/circularProgressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:indeterminate="false"
        android:max="100"
        android:progress="50"
        android:layout_centerInParent="true"
        android:progressDrawable="@drawable/circular"
        android:secondaryProgress="100"
        />

    <ImageView
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:background="@drawable/whitecircle"
        android:layout_centerInParent="true"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:gravity="center"
        android:text="25%"
        android:layout_centerInParent="true"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="20sp" />

</RelativeLayout>

Dans activity_main.xmlj'ai utilisé une image circulaire avec un fond blanc pour montrer un fond blanc autour du pourcentage. Voici l'image:

entrez la description de l'image ici

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:

import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.DecelerateInterpolator;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    int pStatus = 0;
    private Handler handler = new Handler();
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        Drawable drawable = res.getDrawable(R.drawable.circular);
        final ProgressBar mProgress = (ProgressBar) findViewById(R.id.circularProgressbar);
        mProgress.setProgress(0);   // Main Progress
        mProgress.setSecondaryProgress(100); // Secondary Progress
        mProgress.setMax(100); // Maximum Progress
        mProgress.setProgressDrawable(drawable);

      /*  ObjectAnimator animation = ObjectAnimator.ofInt(mProgress, "progress", 0, 100);
        animation.setDuration(50000);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.start();*/

        tv = (TextView) findViewById(R.id.tv);
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (pStatus < 100) {
                    pStatus += 1;

                    handler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            mProgress.setProgress(pStatus);
                            tv.setText(pStatus + "%");

                        }
                    });
                    try {
                        // Sleep for 200 milliseconds.
                        // Just to display the progress slowly
                        Thread.sleep(8); //thread will take approx 1.5 seconds to finish
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

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

Parsania Hardik
la source
15

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:

Gif démo CircularProgressBar

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:

compile 'com.mikhaellopez:circularprogressbar:1.0.0'

XML

<com.mikhaellopez.circularprogressbar.CircularProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:background_progressbar_color="#FFCDD2"
    app:background_progressbar_width="5dp"
    app:progressbar_color="#F44336"
    app:progressbar_width="10dp" />

Vous devez utiliser les propriétés suivantes dans votre XML pour modifier votre CircularProgressBar.

Propriétés:

  • app:progress (entier) >> par défaut 0
  • app:progressbar_color (couleur) >> par défaut NOIR
  • app:background_progressbar_color (couleur) >> par défaut GRIS
  • app:progressbar_width (dimension) >> par défaut 7dp
  • app:background_progressbar_width (dimension) >> 3dp par défaut

JAVA

CircularProgressBar circularProgressBar = (CircularProgressBar)findViewById(R.id.yourCircularProgressbar);
circularProgressBar.setColor(ContextCompat.getColor(this, R.color.progressBarColor));
circularProgressBar.setBackgroundColor(ContextCompat.getColor(this, R.color.backgroundProgressBarColor));
circularProgressBar.setProgressBarWidth(getResources().getDimension(R.dimen.progressBarWidth));
circularProgressBar.setBackgroundProgressBarWidth(getResources().getDimension(R.dimen.backgroundProgressBarWidth));
int animationDuration = 2500; // 2500ms = 2,5s
circularProgressBar.setProgressWithAnimation(65, animationDuration); // Default duration = 1500ms

Fork ou Téléchargez cette bibliothèque ici >> https://github.com/lopspower/CircularProgressBar

lopez.mikhael
la source
J'ai essayé ceci, c'est vraiment génial, mais j'ai maintenant trouvé un auditeur de changement d'animation. Le savez-vous de quelque façon?
Md Imran Choudhury
@ lopez.mikhael Hey, avez-vous des idées pour ajouter une image entre la circulaire?
hyperfkcb
@DeniseTan vous pouvez simplement utiliser un FrameLayout ou un RelativeLayout pour le faire.
lopez.mikhael
8

Voici une vue personnalisée simple pour afficher la progression du cercle. Vous pouvez modifier et optimiser davantage pour convenir à votre projet.

class CircleProgressBar @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
    private val backgroundWidth = 10f
    private val progressWidth = 20f

    private val backgroundPaint = Paint().apply {
        color = Color.LTGRAY
        style = Paint.Style.STROKE
        strokeWidth = backgroundWidth
        isAntiAlias = true
    }

    private val progressPaint = Paint().apply {
        color = Color.RED
        style = Paint.Style.STROKE
        strokeWidth = progressWidth
        isAntiAlias = true
    }

    var progress: Float = 0f
        set(value) {
            field = value
            invalidate()
        }

    private val oval = RectF()
    private var centerX: Float = 0f
    private var centerY: Float = 0f
    private var radius: Float = 0f

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        centerX = w.toFloat() / 2
        centerY = h.toFloat() / 2
        radius = w.toFloat() / 2 - progressWidth
        oval.set(centerX - radius,
                centerY - radius,
                centerX + radius,
                centerY + radius)
        super.onSizeChanged(w, h, oldw, oldh)
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawCircle(centerX, centerY, radius, backgroundPaint)
        canvas?.drawArc(oval, 270f, 360f * progress, false, progressPaint)
    }
}

Exemple d'utilisation

xml

<com.example.androidcircleprogressbar.CircleProgressBar
    android:id="@+id/circle_progress"
    android:layout_width="200dp"
    android:layout_height="200dp" />

Kotlin

class MainActivity : AppCompatActivity() {
    val TOTAL_TIME = 10 * 1000L

    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        timeOutRemoveTimer.start()
    }

    private var timeOutRemoveTimer = object : CountDownTimer(TOTAL_TIME, 10) {
        override fun onFinish() {
            circle_progress.progress = 1f
        }

        override fun onTick(millisUntilFinished: Long) {
            circle_progress.progress = (TOTAL_TIME - millisUntilFinished).toFloat() / TOTAL_TIME
        }
    }
}

Résultat

Phan Van Linh
la source
5

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.

Miao Liu
la source
3

essayez cette méthode pour créer un bitmap et le définir en vue image.

private void circularImageBar(ImageView iv2, int i) {


    Bitmap b = Bitmap.createBitmap(300, 300,Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(b); 
    Paint paint = new Paint();

        paint.setColor(Color.parseColor("#c4c4c4"));
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawCircle(150, 150, 140, paint);

        paint.setColor(Color.parseColor("#FFDB4C"));
        paint.setStrokeWidth(10);   
        paint.setStyle(Paint.Style.FILL);
        final RectF oval = new RectF();
        paint.setStyle(Paint.Style.STROKE);
        oval.set(10,10,290,290);

        canvas.drawArc(oval, 270, ((i*360)/100), false, paint);
        paint.setStrokeWidth(0);    
        paint.setTextAlign(Align.CENTER);
        paint.setColor(Color.parseColor("#8E8E93")); 
        paint.setTextSize(140);

        canvas.drawText(""+i, 150, 150+(paint.getTextSize()/3), paint); 

        iv2.setImageBitmap(b);
}
mani
la source
2

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!

Travis
la source
J'ai vu cette bibliothèque aussi mais je ne voulais pas utiliser une autre bibliothèque tierce uniquement pour cette petite tâche. Cependant, je vais essayer les deux méthodes mentionnées par vous et Tenfour04 pour voir laquelle fonctionne pour moi et répondre ici.
Saurav Srivastava
1
@SauravSrivastava: Je recherche également une animation similaire dans mon application, avez-vous trouvé la solution? Si oui, veuillez partager la solution.
Basher51
@Travis S'il vous plaît voir cette question - stackoverflow.com/questions/44801280/…
Kumar
2

@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.xmlcode en ceci:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"> <!-- Just add this line -->
        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>
mim
la source
2
Excellente remarque sur android: useLevel = "true" !!! Vous m'avez aidé à résoudre un problème important sur Android 5! Merci beaucoup!
DmitryKanunnikoff
2
package com.example.ankitrajpoot.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;


public class MainActivity extends Activity {

    private ProgressBar spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner=(ProgressBar)findViewById(R.id.progressBar);
        spinner.setVisibility(View.VISIBLE);
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<ProgressBar
    android:id="@+id/progressBar"

    android:layout_width="48dp"
    style="?android:attr/progressBarStyleLarge"
    android:layout_height="48dp"
    android:indeterminateDrawable="@drawable/circular_progress_bar"
    android:indeterminate="true" />
</RelativeLayout>





<?xml version="1.0" encoding="utf-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="0"
    android:toDegrees="1080">
    <shape
        android:shape="ring"
        android:innerRadiusRatio="3"
        android:thicknessRatio="8"
        android:useLevel="false">

        <size
            android:width="56dip"
            android:height="56dip" />

        <gradient
            android:type="sweep"
            android:useLevel="false"
            android:startColor="@android:color/transparent"
            android:endColor="#1e9dff"
            android:angle="0"
            />

    </shape>
</rotate>
Ankit Rajpoot
la source
Vous devez co-décider d'ajouter une description de la solution proposée.
il_raffa
2

Avec la bibliothèque de composants matériels, vous pouvez utiliser ProgressIndicatoravec un Widget.MaterialComponents.ProgressIndicator.Circular.Determinatestyle.

Quelque chose comme:

<com.google.android.material.progressindicator.ProgressIndicator
    style="@style/Widget.MaterialComponents.ProgressIndicator.Circular.Determinate"
    app:indicatorColor="@color/...."
    app:trackColor="@color/...."
    app:circularRadius="64dp"/>

Vous pouvez utiliser ces attributs:

  • circularRadius: définit le rayon de l'indicateur de progression circulaire
  • trackColor: la couleur utilisée pour la piste de progression. S'il n'est pas défini, il sera défini sur indicatorColoret appliquera le à android:disabledAlphapartir 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ème

entrez la description de l'image ici

Utilisez 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.

Gabriele Mariotti
la source
Quelle est la dépendance de bibliothèque requise?
bikram le
@bikram La bibliothèque de composants matériels fournie par google.
Gabriele Mariotti
J'ai ajouté l'implémentation 'com.google.android.material: material: 1.1.0' à build.gradle mais ProgressIndicator n'apparaît toujours pas.
bikram le
@bikram Comme décrit dans la réponse: il nécessite au moins la version 1.3.0-alpha01.
Gabriele Mariotti
1

Changement

android:useLevel="false"

à

android:useLevel="true"

pour le second sahpe avec id="@android:id/progress

esperons que ça marche

ASHMIL HUSSAIN K
la source