web-dev-qa-db-fra.com

Android Animate Rotate

J'ai fait quelques recherches dans Android code, et j'ai vu l'utilisation de dans la barre de progression indéterminée. Après avoir essayé de créer mon propre dessinable avec cette balise:

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

J'obtiens une erreur: "Aucun identifiant de ressource trouvé pour l'attribut 'frameDuration' dans le package 'Android'" - ce qui signifie que frameDuration est un attribut privé. Existe-t-il un moyen d'utiliser cette fonction "animation-rotation"?

Ma tâche consiste à remplacer la barre de progression indéterminée par défaut du système. Je voudrais le faire avec le moins de code possible (changez simplement quelques attributs si possible). À l'aide de la vue ProgressBar, définissez:

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

et pointer "@ drawable/pia_sivuvator" vers cet objet aurait rendu ma tâche aussi élégante que possible, mais je suis coincé sur ces attributs privés.

aidez-moi?

52
oriharel

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 cela a bien fonctionné, mais la largeur/hauteur que je définissais n'était pas respectée, j'ai donc fini par créer une animation de rotation simple et une 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, définissez le nombre de répétitions et démarrez-le à partir de la vue

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);
60
Ian G. Clifton

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

Ensuite, bien sûr, utilisez-le dans les styles comme l'écrit Mario Lenci:

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

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

Soit dit en passant, si vous souhaitez modifier ces 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 framework Styles définissant dans le values/styles.xml déposer un style ProgressBar étendant la norme Android one:

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

puis l'appliquer à la barre de progression dans le fichier de disposition xml.

...
<ProgressBar
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     style="@style/YourProgressBarStyle"/>
...
8
Mario Lenci

J'ai résolu cela en utilisant ce xml dessinable. Bien que cela ne semble fluide que 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" />
5
Intrications

Voici l'explication simple de l'animation de rotation essayez ceci cela vous aidera

http://androidtutorials60.blogspot.in/2013/09/simple-rotate-animation-in-Android.html

<rotate xmlns:Android="”http://schemas.Android.com/apk/res/Android”">
  Android:duration="4000"
  Android:fromdegrees="0"
  Android:pivotx="50%"
  Android:pivoty="50%"
  Android:todegrees="360"
  Android:toyscale="0.0"
</rotate>
4
Bhushan Shirsath