¿Cómo crear una barra de progreso circular en Android que gira sobre ella?


154

Estoy tratando de crear una barra de progreso redondeada. Esto es lo que quiero lograr

Hay un anillo de fondo de color gris. Además de eso, aparece una barra de progreso de color azul que se mueve en una ruta circular de 0 a 360 en 60 o cualquier cantidad de segundos.

ingrese la descripción de la imagen aquí

Aquí está mi código de ejemplo.

<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 hacer esto, en el dibujo "progressBarBG", estoy creando una lista de capas y dentro de esa lista de capas estoy dando dos elementos como se muestra.

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

Ahora, el primer anillo gris se genera bien. Sin embargo, el anillo azul comienza desde la izquierda del dibujo y se dirige hacia la derecha, tal como funciona una barra de progreso lineal. Así es como se muestra al 50% de progreso con la flecha de color rojo que muestra la dirección.

ingrese la descripción de la imagen aquí

Quiero mover la barra de progreso azul en ruta circular como se esperaba.


9
No estoy seguro de por qué has sido rechazado, parece un poco injusto.
BenjaminPaul

1
Miré antes de publicar esta pregunta. Encontré algunas respuestas pero no funcionaron para lo que estoy tratando de lograr. Tal vez alguien me rechazó pensando que esta es una publicación duplicada.
Saurav Srivastava

1
tal vez esto pueda guiarte
gmemario

1
puedes usar esta biblioteca github.com/emre1512/CircleProgressBar
Zapdos

1
¿Podrías recompensar a una de las personas generosas que intentaron encontrar una solución para ti por sus grandes esfuerzos al aceptar una de las respuestas proporcionadas?
CEO tech4lifeapps

Respuestas:


324

Aquí están mis dos soluciones.

Respuesta corta:

En lugar de crear un layer-list, lo separé en dos archivos. Uno para ProgressBary otro para su fondo.

Este es el ProgressDrawablearchivo (carpeta @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>

Y esto es por su background(carpeta @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>

Y al final, dentro del diseño que estás trabajando:

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

Aquí está el resultado:

resultado 1

Respuesta larga:

Utilice una vista personalizada que herede el android.view.View

resultado 2

Aquí está el proyecto completo en github


@Pedram ¿Cómo debo establecer el porcentaje en la barra de progreso? Como por ejemplo, actualmente es del 50%. ¿Cómo debo establecer el 50% en la barra de progreso?

@ 20 centavos, lea la documentación, debe obtener una referencia a su barra de progreso y llamar a su setProgressmétodo y luego pasar el valor. google.com/…
M. Reza Nasirloo

Me volví loco tratando de encontrar los valores correctos, docenas rojos de temas de stackoverflow, solo para encontrar la solución aquí ... ¡lo android:fromDegrees="270" android:toDegrees="270"resolví! ¡Muchas gracias!
Henrique de Sousa

@Skynet Sí, y no he intentado solucionarlo porque prefiero crear uno totalmente personalizado con la extensión de View Class developer.android.com/training/custom-views/index.html
M. Reza Nasirloo

1
@MimArmand Hola, gracias. En realidad, comenzó a funcionar nuevamente en la actualización de lollipop 5.1, y esa línea soluciona el problema para la API 21.
M. Reza Nasirloo

23

Lo he hecho de manera fácil:

Por favor, compruebe la captura de pantalla para el mismo.

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 esto te ayudará.


Hola Hiren, estoy tratando de mostrar solo dos colores en la vista. Rojo y verde. Pero también veo una mezcla de rojo y verde en el círculo. ¿Cómo puedo eliminar eso?
Lokesh Pandey

20

He escrito un ejemplo detallado en la barra de progreso circular en Android aquí en mi blog demonuts.com . También puede encontrar el código fuente completo y la explicación allí.

Así es como hice una barra de progreso circular con porcentaje dentro del círculo en código puro sin ninguna biblioteca.

ingrese la descripción de la imagen aquí

primero crea un archivo dibujable llamado 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>

Ahora en su activity_main.xml complemento siguiente:

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

En activity_main.xmlHe usado una imagen circular con fondo blanco para mostrar el fondo blanco alrededor del porcentaje. Aquí está la imagen:

ingrese la descripción de la imagen aquí

Puede cambiar el color de esta imagen para establecer un color personalizado alrededor del porcentaje de texto.

Ahora finalmente agregue el siguiente 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();
    }
}

Si desea hacer una barra de progreso horizontal, siga este enlace, tiene muchos ejemplos valiosos con código fuente:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar


15

Me di cuenta de una biblioteca de código abierto en GitHub CircularProgressBar que hace exactamente lo que quieres de la manera más simple posible:

Demo Gif CircularProgressBar

USO

Para hacer un ProgressBar circular, agregue CircularProgressBar en su diseño XML y agregue la biblioteca CircularProgressBar en su proyector o también puede tomarlo a través de 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" />

Debe usar las siguientes propiedades en su XML para cambiar su CircularProgressBar.

Propiedades:

  • app:progress (entero) >> predeterminado 0
  • app:progressbar_color (color) >> predeterminado NEGRO
  • app:background_progressbar_color (color) >> GRIS predeterminado
  • app:progressbar_width (dimensión) >> 7dp predeterminado
  • app:background_progressbar_width (dimensión) >> 3dp predeterminado

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

Bifurque o descargue esta biblioteca aquí >> https://github.com/lopspower/CircularProgressBar


Intento esto, es realmente increíble, pero ahora encontré cualquier oyente de cambio de animación. ¿Conoces alguna manera?
Md Imran Choudhury

@ lopez.mikhael Hola, ¿tienes alguna idea de cómo agregar una imagen entre la circular?
hyperfkcb

@DeniseTan simplemente puede usar un FrameLayout o un RelativeLayout para hacer eso.
lopez.mikhael

8

Aquí hay una vista personalizada simple para mostrar el progreso del círculo. Puede modificar y optimizar más para adaptarlo a su proyecto.

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

Ejemplo 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


5

Soy nuevo, así que no puedo comentar, pero pensé en compartir la solución perezosa. También uso el enfoque original de Pedram, y me encontré con el mismo problema de Lollipop. Pero alanv en otra publicación tenía una solución de una línea. Es algún tipo de error o descuido en API21. Literalmente solo agregue android:useLevel="true"a su círculo progreso xml. El nuevo enfoque de Pedram sigue siendo la solución adecuada, pero pensé que también compartiría la solución perezosa.


3

pruebe este método para crear un mapa de bits y establecerlo en vista de imagen.

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

2

https://github.com/passsy/android-HoloCircularProgressBar es un ejemplo de una biblioteca que hace esto. Como dijo Tenfour04, tendrá que ser algo personalizado, ya que esto no se admite directamente desde el primer momento. Si esta biblioteca no se comporta como lo desea, puede bifurcarla y modificar los detalles para que funcione a su gusto. Si implementa algo que otros pueden reutilizar, ¡incluso podría enviar una solicitud de extracción para volver a fusionarla!


También vi esta biblioteca pero no quería usar otra biblioteca de terceros solo para esta pequeña tarea. Sin embargo, voy a probar los dos métodos mencionados por usted y Tenfour04 para ver cuál funciona para mí y responder aquí.
Saurav Srivastava

1
@SauravSrivastava: También estoy buscando una animación similar en mi aplicación. ¿Has encontrado la solución? En caso afirmativo, comparta la solución.
Basher51

@Travis Consulte esta pregunta - stackoverflow.com/questions/44801280/…
Kumar

2

@Pedram, su solución anterior también funciona bien en lollipop (y mejor que la nueva, ya que se puede usar en todas partes, incluidas las vistas remotas) simplemente cambie su circular_progress_bar.xmlcódigo a esto:

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

2
Excelente comentario sobre android: useLevel = "true" !!! ¡Me ayudaste a resolver un problema importante en Android 5! ¡Muchas gracias!
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>

Debería agregar una descripción de la solución propuesta.
il_raffa

2

Con la Biblioteca de componentes de material puede usar ProgressIndicatorcon un 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"/>

Puedes usar estos atributos:

  • circularRadius: define el radio del indicador de progreso circular
  • trackColor: el color utilizado para la pista de progreso. Si no se define, se establecerá en el indicatorColory se aplicará android:disabledAlphadesde el tema.
  • indicatorColor: el color único utilizado para el indicador en modo determinado / indeterminado. Por defecto usa el color primario del tema

ingrese la descripción de la imagen aquí

Use progressIndicator.setProgressCompat((int) value, true);para actualizar el valor en el indicador.

Nota: requiere al menos la versión 1.3.0-alpha01.


¿Cuál es la dependencia de biblioteca requerida?
bikram

@bikram La biblioteca de componentes de material proporcionada por google.
Gabriele Mariotti

Agregué la implementación 'com.google.android.material: material: 1.1.0' a build.gradle pero todavía no aparece ProgressIndicator.
bikram

@bikram Como se describe en la respuesta: requiere al menos la versión 1.3.0-alpha01.
Gabriele Mariotti

1

Cambio

android:useLevel="false"

a

android:useLevel="true"

para el segundo sahpe con id="@android:id/progress

espero que funcione

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.