Sequential Animations
I_Artist has a blog post up regarding issues with the animation documentation. He is absolutely correct in his general theme, that the documentation is lacking. However, one of his statements is equally incorrect.
With regards to animation sets, I_Artist writes:
Transformations by default are not sequential, but are composite. The only way to make them sequential is by timing them against the beginning of the animation, NOT against the previous transformation.
Nonsense! Use an AnimationListener. In onAnimationEnd() of the
first animation, call startAnimation() to kick off the next
in sequence. This works like a champ. It also addresses I_Artist’s concern:
That means that transformations are not timed relative to each other but rather against the beginning of the full animation. Therefore if you have 10 transformations in a file that you timed to start sequentially and then decide that you want to change the delay of the first transformation, well then you have to change the timing for every transformation in the file.
By using AnimationListener, if you change the timing of the start,
everything else follows along as planned, without modifying each
and every animation.
I am also decidely nervous about I_Artist’s use of the fill
attributes (e.g., android:fillAfter). In my experiments, those
have a visual effect, but that’s it. For example, suppose you
use a TranslateAnimation to slide a Button across the
screen. By default, when the animation ends, the Button will
snap back to where it was originally, since there is nothing keeping
the Button in the final position. If you try using fill
parameters to have the Button stick to where the animation
ends, it looks like it works…but the actual “hot spot” for
the click action is back where the Button was originally.
The fill attributes seem to affect where the pixels of the
View are drawn, but that’s it. If you really want the Button
to remain where the animation completes, use an AnimationListener,
and in onAnimationEnd() do something to adjust the layout rules
such that the Button winds up where you want it.
There is nothing wrong with the fill attributes, so long as
you recognize the limits of their behavior.

