Como criar uma barra de progresso circular no Android que gira sobre ela?

154

Estou tentando criar uma barra de progresso arredondada. É isso que eu quero alcançar

Há um anel de fundo cinza. Além disso, é exibida uma barra de progresso de cor azul que se move em um caminho circular de 0 a 360 em 60 ou em qualquer quantidade de segundos.

insira a descrição da imagem aqui

Aqui está o meu código de exemplo.

<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"
            />

Para fazer isso, no drawable "progressBarBG", estou criando uma lista de camadas e, dentro dessa lista de camadas, estou fornecendo dois itens, como mostrado.

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

Agora, o primeiro anel cinza é gerado com precisão. O anel azul, no entanto, começa da esquerda do drawable e vai para a direita, exatamente como funciona uma barra de progresso linear. É assim que ele mostra um progresso de 50%, com a seta vermelha mostrando a direção.

insira a descrição da imagem aqui

Quero mover a barra de progresso azul no caminho circular conforme o esperado.

Saurav Srivastava
fonte
9
Não sei por que você foi rejeitado, parece um pouco injusto.
BenjaminPaul
1
Eu olhei antes de postar esta pergunta. Encontrei algumas respostas, mas elas não funcionaram para o que estou tentando alcançar. Talvez alguém tenha me rebaixado ao pensar que este é um post duplicado.
Saurav Srivastava
1
talvez isso você pode apontar na direção certa github.com/grmaciel/two-level-circular-progress-bar
gmemario
1
você pode usar esta biblioteca github.com/emre1512/CircleProgressBar
Zapdos
1
Você poderia por favor recompensar uma das pessoas generosas que tentaram encontrar uma solução para você por seus grandes esforços aceitando uma das respostas fornecidas?
CEO tech4lifeapps

Respostas:

324

Aqui estão minhas duas soluções.

Resposta curta:

Em vez de criar um layer-list, eu o separei em dois arquivos. Um por ProgressBare outro por seu fundo.

Este é o ProgressDrawablearquivo (pasta @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>

E isso é para sua background(pasta @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>

E no final, dentro do layout em que você está trabalhando:

<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" />

Aqui está o resultado:

resultado 1

Resposta longa:

Use uma exibição personalizada que herda o android.view.View

resultado 2

Aqui está o projeto completo no github

M. Reza Nasirloo
fonte
@Pedram Como definir porcentagem na barra de progresso? Como por exemplo, atualmente ele teria 50%. Como devo definir os 50% para a barra de progresso?
@ 20 Centavos, Leia a documentação, você deve obter uma referência à sua barra de progresso e chamar o setProgressmétodo, depois passar o valor. google.com/…
M. Reza Nasirloo
Eu fiquei louco tentando encontrar os valores corretos, dezenas vermelhas de tópicos de stackoverflow, apenas para encontrar a solução aqui .. android:fromDegrees="270" android:toDegrees="270"resolvi !! Muito Obrigado!
Henrique de Sousa
@Skynet Sim, e não tentei corrigi-lo porque prefiro criar um totalmente personalizado com a extensão da View Class developer.android.com/training/custom-views/index.html
M. Reza Nasirloo
1
@MimArmand Ei, obrigado, Na verdade, começar a trabalhar novamente na atualização pirulito 5,1 e que correções linha a questão para api 21.
M. Reza Nasirloo
23

Eu fiz com maneira fácil:

Por favor, verifique a captura de tela para o mesmo.

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>

Espero que isso ajude você.

Hiren Patel
fonte
Oi Hiren, estou tentando exibir apenas duas cores na exibição. Vermelho e verde. Mas também vejo uma mistura de vermelho e verde no círculo. Como posso remover isso?
Lokesh Pandey
20

Eu escrevi exemplo detalhado na barra de progresso circular no android aqui no meu blog demonuts.com . Você também pode gostar de código fonte completo e explicação lá.

Aqui está como fiz progressbar circular com porcentagem dentro do círculo em código puro, sem nenhuma biblioteca.

insira a descrição da imagem aqui

primeiro crie um arquivo drawable chamado 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>

Agora no seu activity_main.xml add seguinte:

  <?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>

Em activity_main.xmlEu usei uma imagem circular com fundo branco para mostrar o fundo branco em torno da porcentagem. Aqui está a imagem:

insira a descrição da imagem aqui

Você pode alterar a cor desta imagem para definir cores personalizadas em torno do texto percentual.

Agora, finalmente, adicione o seguinte código a 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();
    }
}

Se você quiser fazer a barra de progresso horizontal, siga este link, ele contém muitos exemplos valiosos com o código-fonte:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar

Parsania Hardik
fonte
15

Percebi uma biblioteca Open Source no GitHub CircularProgressBar que faz exatamente o que você deseja da maneira mais simples possível:

Demonstração GIF CircularProgressBar

USO

Para criar uma ProgressBar circular, adicione CircularProgressBar no XML do layout e adicione a biblioteca CircularProgressBar no seu projetor ou você também pode obtê-la através do 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" />

Você deve usar as seguintes propriedades em seu XML para alterar seu CircularProgressBar.

Propriedades:

  • app:progress (inteiro) >> padrão 0
  • app:progressbar_color (cor) >> padrão PRETO
  • app:background_progressbar_color (cor) >> padrão CINZENTO
  • app:progressbar_width (dimensão) >> 7dp padrão
  • app:background_progressbar_width (dimensão) >> padrão 3dp

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

Garfo ou Baixe esta biblioteca aqui >> https://github.com/lopspower/CircularProgressBar

lopez.mikhael
fonte
Eu tentei isso, é realmente incrível, mas agora encontrei qualquer ouvinte de alteração de animação. Você conhece alguma maneira?
Md Imran Choudhury
@ lopez.mikhael Ei, você tem alguma idéia de como adicionar uma imagem entre a circular?
Hyperfkcb
@ DeniseTan, você pode simplesmente usar um FrameLayout ou um RelativeLayout para fazer isso.
Lopez.mikhael
8

Aqui está uma visualização personalizada simples para o progresso do círculo de exibição. Você pode modificar e otimizar mais para adequado ao seu projeto.

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

Exemplo usando

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
        }
    }
}

Resultado

Phan Van Linh
fonte
5

Eu sou novo, então não posso comentar, mas pensei em compartilhar a correção preguiçosa. Também uso a abordagem original de Pedram e acabei encontrando o mesmo problema do Lollipop. Mas em outro post havia uma correção de uma linha. É algum tipo de bug ou supervisão na API21. Literalmente, basta adicionar android:useLevel="true"ao seu círculo progresso xml. A nova abordagem do Pedram ainda é a correção adequada, mas eu também pensei em compartilhar a correção preguiçosa.

Miao Liu
fonte
3

tente este método para criar um bitmap e defina-o como visualização de imagem.

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
fonte
2

https://github.com/passsy/android-HoloCircularProgressBar é um exemplo de uma biblioteca que faz isso. Como o Tenfour04 afirmou, terá que ser um pouco personalizado, pois isso não é suportado diretamente da caixa. Se essa biblioteca não se comportar como você deseja, você pode bifurcá-la e modificar os detalhes para fazê-la funcionar ao seu gosto. Se você implementar algo que outras pessoas possam reutilizar, você poderá enviar uma solicitação de recebimento para que a fusão seja incorporada novamente!

Travis
fonte
Vi essa biblioteca também, mas não queria usar outra biblioteca de terceiros apenas para esta pequena tarefa. No entanto, tentarei ambos os métodos mencionados por você e pelo Tenfour04 para ver qual deles funciona para mim e responder aqui.
Saurav Srivastava
1
@SauravSrivastava: Também estou procurando uma animação semelhante no meu app. Você encontrou a solução? Se sim, compartilhe a solução.
precisa saber é o seguinte
@Travis Por favor, veja esta questão - stackoverflow.com/questions/44801280/...
Kumar
2

@Pedram, sua solução antiga também funciona bem com pirulito (e melhor que a nova, já que é utilizável em qualquer lugar, inclusive em exibições remotas), basta alterar seu circular_progress_bar.xmlcódigo para:

<?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
fonte
2
Excelente observação no android: useLevel = "true" !!! Você me ajudou a resolver um problema importante no Android 5! Muito obrigado!
precisa saber é o seguinte
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
fonte
Você pode adicionar uma descrição da solução proposta.
precisa saber é o seguinte
2

Com a Biblioteca de componentes de material, você pode usá-lo ProgressIndicatorcom um Widget.MaterialComponents.ProgressIndicator.Circular.Determinateestilo.

Algo como:

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

Você pode usar estes atributos:

  • circularRadius: define o raio do indicador de progresso circular
  • trackColor: a cor usada para a trilha de progresso. Se não definido, será definido como indicatorColore aplicará o android:disabledAlphado tema.
  • indicatorColor: a cor única usada para o indicador no modo determinado / indeterminado. Por padrão, ele usa a cor principal do tema

insira a descrição da imagem aqui

Use progressIndicator.setProgressCompat((int) value, true);para atualizar o valor no indicador.

Nota: requer pelo menos a versão 1.3.0-alpha01.

Gabriele Mariotti
fonte
Qual é a dependência de biblioteca necessária?
bikram 7/07
@bikram A biblioteca de componentes de materiais fornecida pelo google.
Gabriele Mariotti
Adicionei a implementação 'com.google.android.material: material: 1.1.0' para build.gradle, mas o ProgressIndicator ainda não aparece.
bikram 7/07
@bikram Conforme descrito na resposta: requer pelo menos a versão 1.3.0-alpha01.
Gabriele Mariotti
1

mudança

android:useLevel="false"

para

android:useLevel="true"

para o segundo sahpe com id="@android:id/progress

espero que funcione

ASHMIL HUSSAIN K
fonte