L'animation de la traduction et de mise à l'échelle de la vue dans Android
Je dois animer un point de vue d'Un état a à B avec les modifications apportées à son échelle, la position et la vitesse de défilement.
Le code suivant ne fait presque le tour:
AnimationSet animation = new AnimationSet(true);
int fromXDelta = view.getScrollX();
int fromYDelta = view.getScrollY();
view.scrollTo(0, 0);
float scale = (float) widthB / (float) widthA;
//Calculate toXDelta and toYDelta
TranslateAnimation translateAnimation = new TranslateAnimation(-fromXDelta, -toXDelta, -fromYDelta, -toYDelta);
translateAnimation.setDuration(duration);
animation.addAnimation(translateAnimation);
ScaleAnimation scaleAnimation = new ScaleAnimation(1, scale, 1, scale);
scaleAnimation.setDuration(duration);
animation.addAnimation(scaleAnimation);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
view.clearAnimation();
//Change view to state B by modifying its layout params and scroll
}
@Override public void onAnimationRepeat(Animation arg0) {}
@Override public void onAnimationStart(Animation arg0) {}
});
view.startAnimation(animation);
La logique de onAnimationEnd rend la vue scintillement après la fin de l'animation. Aussi, si je ne l'appelez pas clearAnimation (), l'animation ne fonctionne pas comme prévu (pourquoi?).
Est-ce la bonne façon de le faire?
Merci!
OriginalL'auteur hpique | 2010-04-11
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si c'est la bonne, mais j'ai eu le même problème que vous.
J'ai réussi à me débarrasser de ce scintillement par l'ajout d'un:
animation.reset();
Juste avant le:
vue.clearAnimation();
Remarque: Dans votre code, il serait arg0.reset();
OriginalL'auteur Rui
Avez-vous essayez de régler une
animation.setFillAfter(true)
?Il permet essentiellement aux la dernière position de l'état de votre point de vue persistent lorsque l'animation est terminée, en évitant toute sorte de scintillement.
OriginalL'auteur PatrickNLT