254 votes

Comment faire une rotation de l’image lisse dans Android ?

Je suis à l'aide d'un RotateAnimation pour faire pivoter une image que j'utilise comme une coutume cyclique spinner Android. Voici mon rotate_indefinitely.xml le fichier, je l'ai placé dans res/anim/:

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:duration="1200" />

Quand je demande à mon ImageView l'aide AndroidUtils.loadAnimation(), il fonctionne très bien!

spinner.startAnimation( 
    AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely) );

Le seul problème, c'est que la rotation de l'image semble faire une pause au sommet de chaque cycle.

En d'autres termes, l'image pivote à 360 degrés, s'interrompt brièvement, puis tourne à 360 degrés à nouveau, etc.

Je soupçonne que le problème est que l'animation est à l'aide d'un défaut de l'interpolateur comme android:iterpolator="@android:anim/accelerate_interpolator" (AccelerateInterpolator), mais je ne sais pas comment faire pour lui dire de ne pas interpoler l'animation.

Comment puis-je désactiver l'interpolation (si c'est bien le problème) pour faire mon cycle d'animation de douceur?

215voto

Bakhtiyor Points 2901

Vous avez raison sur AccelerateInterpolator; vous devez utiliser LinearInterpolator à la place.

Vous pouvez utiliser le haut- android.R.anim.linear_interpolator de votre animation fichier XML avec android:interpolator="@android:anim/linear_interpolator".

Ou vous pouvez créer votre propre XML interpolation de fichier dans votre projet, par exemple, votre nom, il res/anim/linear_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<linearInterpolator xmlns:android="http://schemas.android.com/apk/res/android" />

Et d'ajouter à votre animation XML:

android:interpolator="@anim/linear_interpolator"

Note spéciale: Si votre rotation de l'animation est à l'intérieur d'un ensemble, le réglage de l'interpolateur ne semble pas fonctionner. Faire la rotation de l'élément de fixation. (cela permettra d'économiser votre temps.)

51voto

Luis E. Fernandez Points 101

Cela fonctionne très bien ! Merci !

Pour inverser la rotation :

32voto

ferdy182 Points 1324

Essayez d’utiliser `` 360 ° et 0 ° étant les mêmes

12voto

Christopher Stock Points 696

J’ai eu exactement le même problème ! Élagage-élément qui a enveloppé la - élément a résolu le problème ! Merci à Shalafi ! : D

Votre Rotation_ccw.xml devrait donc loook comme ceci :

Salutations

Christopher

3voto

Norm Tatlock Points 89

Peu importe ce que j’ai essayé, je ne pouvais pas ce faire droit à l’aide de code (et setRotation) pour l’animation de rotation sans heurt. Ce que j’ai fini par faire effectuait les changements de degré si petit, que les petites pauses sont imperceptibles. Si vous n’avez pas besoin de faire trop de tours, le temps d’exécuter cette boucle est négligeable. L’effet est une rotation sans heurt :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X