2010-12-05 31 views
49

J'ai fait des recherches dans le code Android et j'ai vu l'utilisation de dans la barre de progression indéterminée. après avoir essayé de créer mon propre drawable avec ce tag:Android Animate Rotate

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

Je reçois une erreur: « Aucun identifiant de ressource trouvé pour l'attribut « frameDuration » dans le paquet « android » » - ce qui signifie que frameDuration est un attribut privé. Existe-t-il un moyen d'utiliser cette fonction "animer-tourner"?

Ma tâche consiste à remplacer la barre de progression par défaut indéterminée du système. Je voudrais le faire avec le moins de code possible (juste changer quelques attributs si possible). Utilisation de la vue ProgressBar, réglage:

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

et le point « @ drawable/pia_sivuvator » à cet objet serait faire ma tâche ai aussi élégant comme ils viennent, mais je suis coincé sur ces attributs privés.

aide?

+1

ont le même problème. L'exclusion des paramètres ('framesCount' et' frameDuration') n'aide pas beaucoup. L'animation fonctionne, mais ne me semble pas bonne (l'animation n'est pas lisse, comme un faible framerate). a créé un problème sur ce problème http://code.google.com/p/android/issues/detail?id=19248 –

Répondre

57

J'ai rencontré exactement le même problème. Vous pouvez exclure ces paramètres (framesCount et frameDuration), et cela peut fonctionner pour vous. J'ai essayé de les exclure et ça s'est bien passé, mais la largeur/hauteur que je mettais n'était pas respectée, donc j'ai fini par créer une simple animation de rotation et un ImageView pour l'appliquer. Voici le fichier d'animation (res/Anim/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" 
/> 

Ensuite, vous gonflez simplement votre animation, le nombre de répétition défini, et commencer à partir de la vue

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

utiliser 'android: repeatCount =" infinite "' dans le xml au lieu du code – pleerock

+0

si vous voulez pour utiliser le paramètre framesCount, voir http://stackoverflow.com/questions/3760381/rotating-image-animation-list-or-animated-rotate-android/14996762#14996762 – vokilam

6

Je ne sais pas comment travailler autour des attributs privés, j'ai le même problème.

Par ailleurs, si vous voulez changer les attributs de la barre de progression:

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

vous pouvez le faire facilement avec le cadre Styles définissant dans le fichier values/styles.xml un style ProgressBar étendre le standard Android:

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

puis de l'appliquer à la barre de progression dans le fichier de mise en page XML.

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

J'ai résolu ceci en utilisant ce xml drawable. Bien qu'il ne semble être lisse sur les nouvelles versions d'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

Pouvez-vous expliquer ce que vous faites de ce RotateDrawable? http://stackoverflow.com/questions/5872257/how-do-i-use-rotatedrawable – rds

7

Au lieu de créer une animation (plus de code requis, pas seulement la configuration XML), utilisez layer-list comme ressource drawable. Il est assez intéressant que layer-list soit beaucoup plus fluide 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> 

Alors bien sûr l'utiliser dans les styles comme Mario Lenci a écrit:

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

Salut, comment faites-vous tourner? J'ai un ImageView et il montre juste un dessinable encore ... thx –