2010-12-05 27 views
49

Hice algo de excavación en el código de Android, y vi el uso en la barra de progreso indeterminado. después de tratar de crear mi propia estirable con esta etiqueta:Android Animate Girar

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

consigo un error: "Sin identificador de recursos encontrado para el atributo 'frameDuration' en el paquete 'androide'" - lo que significa que frameDuration es un atributo privado. ¿Hay alguna manera de utilizar esta función de "rotación animada"?

Mi tarea es reemplazar la barra de progreso indeterminada predeterminada del sistema. Me gustaría hacerlo con la menor cantidad de código posible (solo cambie algunos atributos si es posible). Usando la vista ProgressBar, estableciendo:

android:indeterminateOnly="true" 
android:indeterminateBehavior="cycle" 
android:indeterminateDuration="3500" 
android:indeterminateDrawable="@drawable/pia_sivuvator" 

y el punto "@ estirable/pia_sivuvator" a ese objeto lo hubiera hacer mi tarea tan elegante como vienen, pero estoy atascado en esos atributos privados.

ayuda?

+1

tienen el mismo problema. La exclusión de parámetros ('framesCount' y' frameDuration') no ayuda mucho. La animación funciona, pero no se ve bien para mí (la animación no es fluida, como una velocidad de fotogramas baja). Se ha producido un problema relacionado con este problema http://code.google.com/p/android/issues/detail?id=19248 –

Respuesta

57

Me encontré con el mismo problema exacto. Puede excluir esos parámetros (framesCount y frameDuration), y puede funcionar para usted. Intenté simplemente excluirlos y se animó bien, pero el ancho/alto que estaba configurando no se respetaba, así que terminé creando una animación de rotación simple y un ImageView para aplicarlo. Aquí está el archivo de animación (res/animal/clockwise_rotation.xml):

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toDegrees="360" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="1000" 
    android:startOffset="0" 
/> 

A continuación, sólo inflar sus Animación, ajuste del número de repeticiones, y empezar desde la vista

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation); 
rotation.setRepeatCount(Animation.INFINITE); 
myView.startAnimation(rotation); 
+24

use 'android: repeatCount =" infinite "' en el código xml en lugar del código – pleerock

+0

si lo desea para utilizar el parámetro framesCount, consulte http://stackoverflow.com/questions/3760381/rotating-image-animation-list-or-animated-rotate-android/14996762#14996762 – vokilam

6

No sé cómo trabajar con los atributos privados, tengo el mismo problema.

Por cierto, si desea cambiar los atributos de la ProgressBar:

android:indeterminateOnly="true" 
android:indeterminateBehavior="cycle" 
android:indeterminateDuration="3500" 
android:indeterminateDrawable="@drawable/pia_sivuvator" 

usted puede hacerlo fácilmente con el marco Estilos definir en el archivo values/styles.xml un estilo ProgressBar extender el estándar de Android uno:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar"> 
     <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item> 
</style> 

y luego aplicarlo a la barra de progreso en el archivo de diseño xml.

... 
<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/YourProgressBarStyle"/> 
... 
5

Lo resolví utilizando este xml dibujable. A pesar de que sólo parece ser suave en las versiones más recientes de Android:

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_pia" 
    android:fromDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toDegrees="1080" /> 
+0

¿Puede explicar qué hace con este RotaryDrawable? http://stackoverflow.com/questions/5872257/how-do-i-use-rotatedrawable – rds

7

En lugar de crear una animación (se requiere más código, no solo la configuración XML), use layer-list como recurso dibujable. Es bastante interesante que layer-list sea mucho más fluido que animated-rotate.

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

Luego, por supuesto utilizarlo en los estilos como escribió Mario Lenci:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar"> 
    <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item> 
</style> 
+3

Hola, ¿cómo lo haces rotar? Tengo un ImageView y solo muestra un dibujable ... thx –