Is it possible to override Android's LayoutAnimationController
in such a way that only certain child View
s that I specify inside a ViewGroup
will animate? My goal is to choose an arbitrary set of the child views based on the current state of the Activity
and animate them with the same animation at exactly the same time, then at a later time choose a different arbitrary set of child views and do the same thing. I would like to be able to do this continually until the Activity
is finished running.
So far I have looked at and dismissed a couple of options:
- Calling
startAnimation(Animation)
the specific child views individually, however there is not a guarantee that they will all start and end at exactly the same time, especially if the number of views in the arbitrary set is large. - Overriding
LayoutAnimationController.getAnimationForView()
seemed like it would be the easiest way, but the method is final and cannot be overridden.
I have been scratching my head for some time on this and figured I would give Stack Overflow a shot.
I wasn't able to find a way to change Android's LayoutAnimationController
, but did come up with a simple solution that does what I want. I created a View
subclass that can selectively ignore calls to run an animation if I so choose.
public class AnimationAverseView extends View {
private boolean mIsAnimatable = true;
public void setAnimatible(boolean isAnimatable) {
if (!isAnimatable) {
clearAnimation();
}
mIsAnimatable = isAnimatable;
}
@Override
public void startAnimation(Animation animation) {
if (mIsAnimatable) {
super.startAnimation(animation);
}
}
}
I did not worry about any other possible animation-related methods, since I only animate the View
s via a LayoutAnimationController
.
I cannot add a comment to the accepted answer, so adding some additional information here. The comment from happydude (Feb 17) was correct for me as well. I had a FrameLayout
as the outermost View for my ListView
header, and I needed to override the setAnimation()
method to prevent the header from being animated with the rest of the list. So you should check out which other animation methods you might need to override.
来源:https://stackoverflow.com/questions/12629159/can-layoutanimationcontroller-animate-only-specified-views