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