Package icyllis.modernui.animation

# Class AnimatorSet.Builder

java.lang.Object
icyllis.modernui.animation.AnimatorSet.Builder

Enclosing class:
  `AnimatorSet`

public class AnimatorSet.Builder extends Object
The `Builder` object is a utility class to facilitate adding animations to a `AnimatorSet` along with the relationships between the various animations. The intention of the `Builder` methods, along with the `play()` method of `AnimatorSet` is to make it possible to express the dependency relationships of animations in a natural way. Developers can also use the `playTogether()` and `playSequentially()` methods if these suit the need, but it might be easier in some situations to express the AnimatorSet of animations in pairs.

The `Builder` object cannot be constructed directly, but is rather constructed internally via a call to `AnimatorSet.play(Animator)`.

For example, this sets up a AnimatorSet to play anim1 and anim2 at the same time, anim3 to play when anim2 finishes, and anim4 to play when anim3 finishes:

         AnimatorSet s = new AnimatorSet();
         s.play(anim1).with(anim2);
         s.play(anim2).before(anim3);
         s.play(anim4).after(anim3);

Note in the example that both `before(Animator)` and `after(Animator)` are used. These are just different ways of expressing the same relationship and are provided to make it easier to say things in a way that is more natural, depending on the situation.

It is possible to make several calls into the same `Builder` object to express multiple relationships. However, note that it is only the animation passed into the initial `AnimatorSet.play(Animator)` method that is the dependency in any of the successive calls to the `Builder` object. For example, the following code starts both anim2 and anim3 when anim1 ends; there is no direct dependency relationship between anim2 and anim3:

       AnimatorSet s = new AnimatorSet();
       s.play(anim1).before(anim2).before(anim3);

If the desired result is to play anim1 then anim2 then anim3, this code expresses the relationship correctly:

       AnimatorSet s = new AnimatorSet();
       s.play(anim1).before(anim2);
       s.play(anim2).before(anim3);

Note that it is possible to express relationships that cannot be resolved and will not result in sensible results. For example, `play(anim1).after(anim1)` makes no sense. In general, circular dependencies like this one (or more indirect ones where a depends on b, which depends on c, which depends on a) should be avoided. Only create AnimatorSets that can boil down to a simple, one-way relationship of animations starting with, before, and after other, different, animations.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `AnimatorSet.Builder`
  `after(long delay)`
  Sets up the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object to play when the given amount of time elapses.
  `AnimatorSet.Builder`
  `after(Animator anim)`
  Sets up the given animation to play when the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object to start when the animation supplied in this method call ends.
  `AnimatorSet.Builder`
  `before(Animator anim)`
  Sets up the given animation to play when the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object ends.
  `AnimatorSet.Builder`
  `with(Animator anim)`
  Sets up the given animation to play at the same time as the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### with

    public AnimatorSet.Builder with(@Nonnull Animator anim)
    Sets up the given animation to play at the same time as the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object.
    Parameters:
      `anim` - The animation that will play when the animation supplied to the `AnimatorSet.play(Animator)` method starts.

  - ### before

    public AnimatorSet.Builder before(@Nonnull Animator anim)
    Sets up the given animation to play when the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object ends.
    Parameters:
      `anim` - The animation that will play when the animation supplied to the `AnimatorSet.play(Animator)` method ends.

  - ### after

    public AnimatorSet.Builder after(@Nonnull Animator anim)
    Sets up the given animation to play when the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object to start when the animation supplied in this method call ends.
    Parameters:
      `anim` - The animation whose end will cause the animation supplied to the `AnimatorSet.play(Animator)` method to play.

  - ### after

    public AnimatorSet.Builder after(long delay)
    Sets up the animation supplied in the `AnimatorSet.play(Animator)` call that created this `Builder` object to play when the given amount of time elapses.
    Parameters:
      `delay` - The number of milliseconds that should elapse before the animation starts.