J'ai besoin d'arrêter une animation de traduction en cours. La .cancel()
méthode de Animation
n'a aucun effet; l'animation va quand même jusqu'à la fin.
Comment annuler une animation en cours?
Appelez clearAnimation()
celui que View
vous avez appelé startAnimation()
.
setFillAfter()
ne fait probablement pas ce que vous pensez qu'il fait, de toute façon. Lorsque l'événement tactile se produit, effacez l'animation, puis ajustez votre disposition pour affecter le changement permanent que vous recherchez.Sur Android 4.4.4, il semble que la seule façon d'arrêter une animation de fondu alpha sur une vue était d'appeler
View.animate().cancel()
(c'est-à-dire d'appeler.cancel()
sur la vue deViewPropertyAnimator
).Voici le code que j'utilise pour la compatibilité avant et après ICS:
... avec la méthode:
Voici l'animation que j'arrête:
la source
.setListener(null);
cela m'a aidé.Si vous utilisez l'écouteur d'animation, définissez
v.setAnimationListener(null)
. Utilisez le code suivant avec toutes les options.la source
v.setAnimation(null);
car cela se fera env.clearAnimation();
.Vous devez utiliser .clearAnimation (); méthode dans le thread d'interface utilisateur:
la source
Ce que vous pouvez essayer de faire est d'obtenir la matrice de transformation de l'animation avant de l'arrêter et d'inspecter le contenu de la matrice pour obtenir les valeurs de position que vous recherchez.
Voici les API que vous devriez examiner
public boolean getTransformation (long currentTime, Transformation outTransformation)
public Matrix getMatrix ()
public void getValues (float[] values)
Ainsi par exemple (du pseudo code. Je n'ai pas testé ça):
la source
Utilisez la méthode setAnimation (null) pour arrêter une animation, elle est exposée comme méthode publique dans View.java , c'est la classe de base pour tous les widgets , qui sont utilisés pour créer des composants d'interface utilisateur interactifs (boutons, champs de texte, etc.).
/** * Sets the next animation to play for this view. * If you want the animation to play immediately, use * {@link #startAnimation(android.view.animation.Animation)} instead. * This method provides allows fine-grained * control over the start time and invalidation, but you * must make sure that 1) the animation has a start time set, and * 2) the view's parent (which controls animations on its children) * will be invalidated when the animation is supposed to * start. * * @param animation The next animation, or null. */ public void setAnimation(Animation animation)
la source
Pour arrêter l'animation, vous pouvez définir un objet ObjectAnimator qui ne fait rien, par exemple
d'abord lors du retournement manuel, il y a une animation de gauche à droite:
puis lors du passage au retournement automatique, il n'y a pas d'animation
la source