¿Cómo puedo obtener el mismo ProgressBar indefinido como ICS con 2 círculos giratorios?

Actualmente estoy escribiendo un proyecto de código abierto que apunta a portar el famoso tema de Holo a versiones anteriores de Android (desde 1,6 !!!)

Todo funciona bien y estoy muy orgulloso de mi trabajo, pero el problema que estoy enfrentando ahora es conseguir que el ProgressBar se parezca totalmente al ICS.

He utilizado el mismo código xml que Android fuente: (progress_medium_holo.xml)

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <rotate android:drawable="@drawable/spinner_48_outer_holo" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="1080" /> </item> <item> <rotate android:drawable="@drawable/spinner_48_inner_holo" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="720" android:toDegrees="0" /> </item> </layer-list> 

Con el mismo png:

Spinner_76_outer_holo.png y spinner_76_inner_holo.png

Introduzca aquí la descripción de la imagen Blanco pic => Introduzca aquí la descripción de la imagen

Pero desafortunadamente, sólo obtengo un círculo …

Si no entiendes lo que quiero decir, puedes probar esta aplicación en un dispositivo pre-ICS:

Https://play.google.com/store/apps/details?id=com.WazaBe.HoloDemo

LA FUENTE COMPLETA ESTÁ AQUÍ: https://github.com/ChristopheVersieux/HoloEverywhere

Muchas gracias por tu ayuda

Introduzca aquí la descripción de la imagen

Sólo encontré la respuesta aquí!

https://stackoverflow.com/a/8697806/327402

¡Puesto muy útil!

De hecho, hay una limitación de la plataforma, aunque no es lo que se podría pensar. El problema es que pre-API11, RotateDrawable tenía algún código crudo en él para requerir que la animación gira en el sentido de las agujas del reloj, verificando si toDegrees era mayor que fromDegrees ; Si no, los dos fueron obligados a igualar entre sí. Si modificó su ejemplo para que el segundo elemento se mueva en una dirección de avance (de 0 a 720 o incluso -720 a 0), ambas imágenes animarían bien en todas las plataformas; Aunque me doy cuenta de que derrota el propósito de lo que estás apuntando.

Echa un vistazo a la versión en caché Google Codesearch tiene de RotateDrawable.inflate() , que es la versión 2.3 del método utilizado para convertir el XML en el objeto, y verá lo que quiero decir.

RotateDrawable.java … el código ofensivo está alrededor de la línea 235 …

  float fromDegrees = a.getFloat( com.android.internal.R.styleable.RotateDrawable_fromDegrees, 0.0f); float toDegrees = a.getFloat( com.android.internal.R.styleable.RotateDrawable_toDegrees, 360.0f); toDegrees = Math.max(fromDegrees, toDegrees); //<--There's the culprit 

Esto toma un bloque XML como el segundo elemento que tiene allí, y lo convierte en un RotateDrawable que termina con el mismo valor para fromDegrees y toDegrees (en su caso, 720), haciendo que la imagen simplemente se toDegrees . Puede probar esto visible estableciendo el valor inicial en un valor no múltiplo de 360 ​​(como 765). Verá que la imagen todavía no se anima, pero se gira a la coordenada inicial.

Esta extraña comprobación se eliminó en las fuentes Honeycomb / ICS, por lo que se puede hacer una rotación hacia atrás en esas plataformas. Además, no parece que hay una forma de establecer estos valores desde el código Java, por lo que un RotateDrawableCompat personalizado puede estar en su futuro 🙂

HTH

Como adición a la respuesta de Profete162: Sé que Jake ha logrado evitar esta limitación en su implementación para SherlockActionBar y hacer visibles las dos imágenes giratorias. Mirando el código fuente para abs__progress_medium_holo.xml parece que simplemente se volteó alrededor de los valores fromDegrees y toDegrees , aunque podría haber más de lo que no soy consciente.

No estoy seguro, pero creo que la etiqueta <rotate> dentro de una lista de capas no es compatible con Android 1.6.

Al mirar en el código fuente de Donut (1.6) veo que el spinner se implementa de esta manera (progress_medium.xml):

 <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/spinner_black_48" android:pivotX="50%" android:pivotY="50%" android:framesCount="12" android:frameDuration="100" /> 

Usted podría intentar que con el Holo dibujables.

Espero eso ayude,
Yuvi

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.