Apply one animation to multiple views at the same time
Solution 1
So I guess this just isn't possible, so I created a helper method to just apply the same animation to a list of views:
public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){
for(int i = 0; i < views.size(); i++){
RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale);
temp.setDuration(duration);
temp.setFillAfter(fillAfter);
views.get(i).startAnimation(temp);
}
}
Definitely a hack, but I guess thats all I'm able to do right now
Solution 2
Do it like this:
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f);
arrayListObjectAnimators.add(anim);
ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f);
arrayListObjectAnimators.add(anim1);
ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(objectAnimators);
animSetXY.duration(1000);
animSetXY.start();
Related videos on Youtube
Jameo
Email: [email protected] Blog: http://blog.mindblowninnovation.com Java, Objective-C, Javascript, HTML5, CSS3 programmer. Loves anything mobile/mobile web related.
Updated on September 16, 2022Comments
-
Jameo over 1 year
So Id like to rotate a handful of views all at the same time, all using the same rotation specs. The issue is that for some reason the rotation acts differently for the second element. Apparently this has to do with the animation object actually changing state in between those two lines of code. Obviously I could just create a seperate Animation object and apply it, but I feel like there is an easier way (I have about 15 views)
Rotates only the first view correctly:
Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); target.startAnimation(rotateAnim); lightBtn.startAnimation(rotateAnim);
Rotates both correctly
Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); target.startAnimation(rotateAnim); lightBtn.startAnimation(rotateAnim2);
XML:
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="-90" android:toDegrees="0" android:pivotX="50%" android:pivotY="50%" android:duration="500" android:fillAfter="true">
Anyone have any ideas?
-
Leandros over 11 yearsTry to use the new Animation API (for backwards compatability use NineOldAndroids). Also I recommend to watch this: youtube.com/watch?v=_UWXqFBF86U
-
Leandros over 11 yearsWrong video, sorry. ;) youtube.com/watch?v=3UbJhmkeSig
-
-
Daniel Wilson over 9 yearsThis does not answer the question, If I am correct you are applying 2 animations to the same view. The original post wants to apply the same animation to 2 views
-
Mercury over 7 yearsThis indeed runs the animation in parallel, BUT you can see a slight delay beteen the animations if you look closely (since you are triggering the animations squentially after all).
-
Stan about 5 years@Mercury If you're doing this on the main thread, nothing will be drawn until you're done. Your calculations block the main thread. No animations will start immediately. When you're done, the next layout pass will actually start the animations, and I believe they should start at the same time.
-
Vasia Zaretskyi over 3 years
.duration(1000)
should be.setDuration(1000)