2010-04-11 12 views
5

Muszę animować widok ze stanu A do B, zmieniając jego skalę, położenie i przewijanie.Animowanie tłumaczenia i skalowania widoku w Androidzie

Poniższy kod niemal załatwia sprawę:

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); 

Logika onAnimationEnd sprawia widok migotanie po zakończeniu animacji. Również jeśli nie wywołam metody clearAnimation() animacja nie działa zgodnie z oczekiwaniami (dlaczego?).

Czy to właściwy sposób?

Dzięki!

Odpowiedz

2

Nie wiem, czy to jest właściwa droga, ale miałem taki sam problem jak ty. Udało mi się pozbyć migotania, dodając:

animation.reset();

Tuż przed:

view.clearAnimation();

Uwaga: W kodzie będzie to arg0.reset();

1

Czy próbowałeś ustawić animation.setFillAfter(true)?

Pozwala zasadniczo utrzymać pozycję/stan widoku po zakończeniu animacji, unikając wszelkiego rodzaju migotania.

Powiązane problemy