1818import android .animation .Animator ;
1919import android .animation .AnimatorSet ;
2020import android .animation .ValueAnimator ;
21+ import android .os .Build ;
2122import androidx .annotation .NonNull ;
23+ import androidx .annotation .RequiresApi ;
2224import androidx .annotation .RestrictTo ;
2325import androidx .annotation .RestrictTo .Scope ;
26+
27+ import java .util .ArrayList ;
28+ import java .util .Collection ;
2429import java .util .List ;
2530
2631/**
@@ -33,17 +38,35 @@ public class AnimatorSetCompat {
3338
3439 /** Sets up this AnimatorSet to play all of the supplied animations at the same time. */
3540 public static void playTogether (@ NonNull AnimatorSet animatorSet , @ NonNull List <Animator > items ) {
36- // Fix for pre-M bug where animators with start delay are not played correctly in an
37- // AnimatorSet.
38- long totalDuration = 0 ;
39- for (int i = 0 , count = items .size (); i < count ; i ++) {
40- Animator animator = items .get (i );
41- totalDuration = Math .max (totalDuration , animator .getStartDelay () + animator .getDuration ());
41+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
42+ Api23Impl .playTogether (animatorSet , items );
43+ } else {
44+ Api21Impl .playTogether (animatorSet , items );
4245 }
43- Animator fix = ValueAnimator .ofInt (0 , 0 );
44- fix .setDuration (totalDuration );
45- items .add (0 , fix );
46+ }
4647
47- animatorSet .playTogether (items );
48+ @ RequiresApi (Build .VERSION_CODES .M )
49+ static class Api23Impl {
50+ static void playTogether (@ NonNull AnimatorSet animatorSet , @ NonNull Collection <Animator > items ) {
51+ animatorSet .playTogether (items );
52+ }
53+ }
54+
55+ static class Api21Impl {
56+ static void playTogether (@ NonNull AnimatorSet animatorSet , @ NonNull Collection <Animator > items ) {
57+ // Fix for pre-M bug where animators with start delay are not played correctly in an
58+ // AnimatorSet.
59+ long totalDuration = 0 ;
60+ for (Animator animator : items ) {
61+ totalDuration = Math .max (totalDuration , animator .getStartDelay () + animator .getDuration ());
62+ }
63+ Animator fix = ValueAnimator .ofInt (0 , 0 );
64+ fix .setDuration (totalDuration );
65+
66+ List <Animator > animators = new ArrayList <>(items .size () + 1 );
67+ animators .add (fix );
68+ animators .addAll (items );
69+ animatorSet .playTogether (animators );
70+ }
4871 }
4972}
0 commit comments