studio programacion herramientas fundamentos con avanzado aplicaciones android android-progressbar

android - programacion - ¿Cómo hacer que ProgressBar deje de girar?



manual de android en pdf (3)

Como comentó toadzky, no hay un método horneado. Puede probar este ProgressWheel . Si nada más, debería darle una idea de cómo implementarlo.

Cuando agrego ProgressBar horizontal, se comporta como se esperaba: configuro el valor de progreso y lo muestra.

Sin embargo cuando agrego ProgressBar (circular) gira. Y eso es. En tal forma es más un indicador de "espera", que cualquier barra de progreso, porque el valor de progreso no se muestra.

Entonces mi pregunta es (suponiendo que Progreso en el nombre significa progreso): ¿cómo dejar de girar y muestra el valor del progreso? Por ejemplo, si configuro el máximo en 100 y el valor en 50 esperaría ver un arco de medio círculo.

En otras palabras, ¿cómo hacer que la Barra de progreso circular se comporte como la Barra de progreso horizontal, con solo una excepción de la forma?


Desde Api 21 , puedes hacer algo como eso: asumiendo que tu Barra de ProgressBar encuentre de esta manera:

<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" style="?android:attr/progressBarStyleLarge" android:id="@+id/progress_bar" android:layout_width="@dimen/item_width" android:layout_height="@dimen/item_height" android:clickable="false" android:indeterminate="true" android:indeterminateDrawable="@drawable/progress"/>

y esto es progress.xml :

<shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false" > <size android:height="76dip" android:width="76dip" /> <gradient android:angle="0" android:endColor="@color/colorGrayText" android:startColor="@android:color/transparent" android:type="sweep" android:useLevel="false" /> </shape>

Ahora puedes hacer esto en tu ProgressBar :

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar); if (progressBar != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { RotateDrawable rotateDrawable = (RotateDrawable) progressBar.getIndeterminateDrawable(); rotateDrawable.setToDegrees(0); } }


Sé que este es un post antiguo, pero me encontré con el mismo problema y lo hago funcionar.

En realidad, es más fácil de lo que piensa, tiene que establecer un progreso personalizado en un archivo xml dentro de su carpeta de dibujo y manejar los atributos "fromDegrees" y "toDegrees" de la etiqueta <rotate>:

Este es el código para custom_progress.xml (puede personalizar el suyo como desee, pero no debe modificar "fromDegrees" y "toDegrees")

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape android:innerRadiusRatio="2.3" android:shape="ring" android:useLevel="false" android:type="sweep" android:thicknessRatio="15.0"> <solid android:color="#0099ff"/> </shape> </item> <item android:id="@android:id/progress"> <rotate android:pivotX="50%" android:pivotY="50%" android:fromDegrees="-90" android:toDegrees="-90"> <shape android:innerRadiusRatio="2.3" android:shape="ring" android:angle="0" android:type="sweep" android:thicknessRatio="15.0"> <solid android:color="#e0e0e0"/> </shape> </rotate> </item> </layer-list>

Y para tu barra de progreso tienes que configurar estos atributos:

<ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="100dp" android:layout_height="100dp" android:indeterminate="false" android:max="100" android:progress="20" android:progressDrawable="@drawable/custom_progress" />

Lo que está sucediendo aquí es que el progreso comenzará en el grado -90, que para mí es la parte superior de la vista de la barra de progreso y hacia la derecha y continuará hacia el mismo grado, esto hará que la vista avance y comience y finalice en el mismo grado

NOTA: si establece 0 para "desde grados" y "para grados", el progreso comenzará desde el lado derecho del círculo.

Espero que ayude a las personas con el mismo requisito.