From 676faeba90f4869a51f0284faa22223f83554faf Mon Sep 17 00:00:00 2001 From: Robert Ly Date: Sun, 6 Feb 2011 01:30:55 -0800 Subject: [PATCH] Doc change: updating animation framework topic Change-Id: Ideb386113a0fb027f62c1ed4215dd0bab79fdb72 --- docs/html/guide/guide_toc.cs | 5 +- docs/html/guide/topics/graphics/animation.jd | 1294 +++++++++-------- .../guide/topics/graphics/view-animation.jd | 190 +++ .../images/animation/animation-linear.png | Bin 0 -> 35996 bytes .../images/animation/animation-nonlinear.png | Bin 0 -> 42162 bytes docs/html/images/animation/valueanimator.png | Bin 0 -> 42031 bytes 6 files changed, 912 insertions(+), 577 deletions(-) create mode 100644 docs/html/guide/topics/graphics/view-animation.jd create mode 100644 docs/html/images/animation/animation-linear.png create mode 100644 docs/html/images/animation/animation-nonlinear.png create mode 100644 docs/html/images/animation/valueanimator.png diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index cf0593ccf8076..13411d86d7992 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -214,8 +214,11 @@ 3D with OpenGL
  • - Animation + Property Animation new!
  • +
  • + View Animation +
  • diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd index 83a4e1d30662c..cd74efa4d5393 100644 --- a/docs/html/guide/topics/graphics/animation.jd +++ b/docs/html/guide/topics/graphics/animation.jd @@ -1,40 +1,37 @@ -page.title=Animation +page.title=Property Animation @jd:body -
  • - -
  • - View Animation - -
      -
    1. Tween animation
    2. - -
    3. Frame animation
    4. -
    -
  • - +
  • Declaring Animations in XML
  • +

    Key classes

    @@ -52,201 +49,504 @@ page.title=Animation

    Related samples

      -
    1. API Demos
    2. +
    3. API + Demos
    - -

    The Android system provides a flexible animation system that allows you to animate - almost anything, either programmatically or declaratively with XML. There are two - animation systems that you can choose from: property - animation and view animation. You can use whichever - system that matches your needs, but use only one system for each object that you - are animating.

    - -

    Property Animation

    - -

    Introduced in Android 3.0, the property animation system allows you to animate - object properties of any type. int, float, - and hexadecimal color values are supported by default. You can animate any other type by telling the - system how to calculate the values for that given type.

    +

    Introduced in Android 3.0, the property animation system is a robust framework that allows you + to animate almost anything. Property animation is not confined to objects drawn on the screen. + You can define an animation to change any object property over time, regardless of whether it + draws to the screen or not.The property animation system also has a few advantages over the view + animation system, which makes it more flexible to use.

    -

    The property animation system allows you to define many aspects of an animation, - such as:

    +

    The view animation system provides the capability to only animate View objects, so if + you wanted to animate non-View objects, you had to implement your own code to do so. The view + animation system also was constrained in the fact that it only exposed a few aspects of a View + object to animate, such as the scaling and rotation of a View but not the background color for + instance.

    + +

    Another disadvantage of the view animation system is that it only modified where the + View was drawn, and not the actual View itself. For instance, if you animated a button to move + across the screen, the button draws correctly, but the actual location where you can click the + button does not change, so you have to implement your own logic to handle this. With the property + animation system, these constraints are completely removed, and you can animate any property of + any object, including View objects, and the object itself is actually modified.

    + +

    The view animation system, however, takes less time to setup and requires less code to write. + If view animation accomplishes everything that you need to do, or if your existing code already + works the way you want, there is no need to use the property animation system.

    + +

    What is Property Animation?

    + A property animation changes a property's (a field in + an object) value over a specified length of time. To animate something, you specify the + object property that you want to animate, such as an object's position on the screen, how long + you want to animate it for, and what values you want to animate between.

    + +

    The property animation system lets you define the following characteristics of an + animation:

    -

    Most of the property animation system's features can be found in - {@link android.animation android.animation}. Because the - view animation system already - defines many interpolators in {@link android.view.animation android.view.animation}, - you will use those to define your animation's interpolation in the property animation - system as well. -

    +

    How the property animation system works

    -

    The following items are the main components of the property animation system:

    +

    First, let's go over how an animation works with a simple example. Figure 1 depicts a + hypothetical object that is animated with its x property, which represents its + horizontal location on a screen. The duration of the animation is set to 40 ms and the distance + to travel is 40 pixels. Every 10 ms, which is the default frame refresh rate, the object moves + horizontally by 10 pixels. At the end of 40ms, the animation stops, and the object ends at + horizontal position 40. This is an example of an animation with linear interpolation, meaning the + object moves at a constant speed.

    -
    -
    Animators
    +

    Figure 1. Example of a linear animation

    -
    - The {@link android.animation.Animator} class provides the basic structure for - creating animations. You normally do not use this class directly as it only provides - minimal functionality that must be extended to fully support animating values. - The following subclasses extend {@link android.animation.Animator}, which you might find more useful: +

    You can also specify animations to have a non-linear interpolation. Figure 2 illustrates a + hypothetical object that accelerates at the beginning of the animation, and decelerates at the + end of the animation. The object still moves 40 pixels in 40 ms, but non-linearly. In the + beginning, this animation accelerates up to the halfway point then decelerates from the + halfway point until the end of the animation. As Figure 2 shows, the distance traveled + at the beginning and end of the animation is less than in the middle.

    -
      -
    • {@link android.animation.ValueAnimator} is the main timing engine for - property animation and computes the values for the property to be animated. - {@link android.animation.ValueAnimator} only computes the animation values and is - not aware of the specific object and property that is being animated or what the - values might be used for. You must listen for updates to values calculated by the - {@link android.animation.ValueAnimator} and process the data with your own logic. - See the section about Animating with ValueAnimator - for more information.
    • +

      Figure 2. Example of a non-linear animation

      -
    • {@link android.animation.ObjectAnimator} is a subclass of {@link - android.animation.ValueAnimator} and allows you to set a target object and object - property to animate. This class is aware of the object and property to be - animated, and updates the property accordingly when it computes a new value for - the animation. See the section about - Animating with ObjectAnimator for more information.
    • +

      Let's take a detailed look at how the important components of the property animation system + would calculate animations like the ones illustrated above. Figure 3 depicts how the main classes + work with one another.

      -
    • {@link android.animation.AnimatorSet} provides a mechanism to group - animations together so that they are rendered in relation to one another. You can - set animations to play together, sequentially, or after a specified delay. - See the section about - Choreographing multiple animations with Animator Sets for more information.
    • -
    -
    +

    Figure 3. How animations are calculated

    -
    Evaluators
    +

    The {@link android.animation.ValueAnimator} object keeps track of your animation's timing, + such as how long the animation has been running, and the current value of the property that it is + animating.

    -
    -

    If you are animating an object property that is not an int, - float, or color, implement the {@link android.animation.TypeEvaluator} - interface to specify how to compute the object property's animated values. You give - a {@link android.animation.TypeEvaluator} the timing data that is provided by an - {@link android.animation.Animator} class, the animation's start and end value, and - provide logic that computes the animated values of the property based on this data.

    +

    The {@link android.animation.ValueAnimator} encapsulates a {@link + android.animation.TimeInterpolator}, which defines animation interpolation, and a {@link + android.animation.TypeEvaluator}, which defines how to calculate values for the property being + animated. For example, in Figure 2, the {@link android.animation.TimeInterpolator} used would be + {@link android.view.animation.AccelerateDecelerateInterpolator} and the {@link + android.animation.TypeEvaluator} would be {@link android.animation.IntEvaluator}.

    -

    You can also specify a custom {@link android.animation.TypeEvaluator} for - int, float, and color values as well, if you want to - process those types differently than the default behavior.

    +

    To start an animation, create a {@link android.animation.ValueAnimator} and give it the + starting and ending values for the property that you want to animate, along with the duration of + the animation. When you call {@link android.animation.ValueAnimator#start start()} the animation + begins. During the whole animation, the {@link android.animation.ValueAnimator} calculates an elapsed fraction + between 0 and 1, based on the duration of the animation and how much time has elapsed. The + elapsed fraction represents the percentage of time that the animation has completed, 0 meaning 0% + and 1 meaning 100%. For example, in Figure 1, the elapsed fraction at t = 10 ms would be .25 + because the total duration is t = 40 ms.

    -

    See Using a TypeEvaluator for more information on - how to write a custom evaluator.

    -
    +

    When the {@link android.animation.ValueAnimator} is done calculating an elapsed fraction, it + calls the {@link android.animation.TimeInterpolator} that is currently set, to calculate an + interpolated fraction. An interpolated fraction maps the elapsed fraction to a new + fraction that takes into account the time interpolation that is set. For example, in Figure 2, + because the animation slowly accelerates, the interpolated fraction, about .15, is less than the + elapsed fraction, .25, at t = 10 ms. In Figure 1, the interpolated fraction is always the same as + the elapsed fraction.

    -
    Interpolators
    +

    When the interpolated fraction is calculated, {@link android.animation.ValueAnimator} calls + the appropriate {@link android.animation.TypeEvaluator}, to calculate the value of the + property that you are animating, based on the interpolated fraction, the starting value, and the + ending value of the animation. For example, in Figure 2, the interpolated fraction was .15 at t = + 10 ms, so the value for the property at that time would be .15 X (40 - 0), or 6.

    -
    -

    A time interpolator defines how specific values in an animation are calculated - as a function of time. For example, you can specify animations to happen linearly - across the whole animation, meaning the animation moves evenly the entire time, or - you can specify animations to use non-linear time, for example, using acceleration - or deceleration at the beginning or end of the animation.

    + -

    The Android system provides a set of common interpolators in - {@link android.view.animation android.view.animation}. If none of these suits your needs, you - can implement the {@link android.animation.TimeInterpolator} interface and create - your own. See Using interpolators for more information on - how to write a custom interpolator.

    -
    -
    - -

    The com.example.android.apis.animation package in the - API Demos sample project also provides a good overview and many examples on how to - use the property animation system.

    + "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API + Demos sample project provides many examples on how to use the property + animation system.

    +

    API Overview

    -

    How the property animation system calculates animated values

    +

    You can find most of the property animation system's APIs in {@link android.animation + android.animation}. Because the view animation system already + defines many interpolators in {@link android.view.animation android.view.animation}, you can use + those interpolators in the property animation system as well. The following tables describe the main + components of the property animation system.

    -

    When you call {@link android.animation.ValueAnimator#start start()} to begin an animation, - the {@link android.animation.ValueAnimator} calculates - an elapsed fraction between 0 and 1, based on the duration of the animation - and how much time has elapsed. The elapsed fraction represents the percentage of time - that the animation has completed, 0 meaning 0% and 1 meaning 100%. The Animator then - calls the {@link android.animation.TimeInterpolator} that is currently set, - to calculate an eased fraction, - which is a modified value of the elapsed fraction that takes into account the interpolator that - is set (time interpolation is often referred to as easing). The eased fraction - is the final value that is used to animate the property.

    +

    The {@link android.animation.Animator} class provides the basic structure for creating + animations. You normally do not use this class directly as it only provides minimal + functionality that must be extended to fully support animating values. The following + subclasses extend {@link android.animation.Animator}: +

    +

    Table 1. Animators

    + + + -

    Once the eased fraction is calculated, {@link android.animation.ValueAnimator} calls - the appropriate {@link android.animation.TypeEvaluator} to calculate the final value of - the property that you are animating, based on the eased fraction, the starting value, - and ending value of the animation.

    + + -

    Animating with ValueAnimator

    + + -

    The {@link android.animation.ValueAnimator} class lets you animate values of some - type for the duration of an animation by specifying a set of int, - float, or color values to animate over and the duration of the animation. - You obtain a {@link android.animation.ValueAnimator} by calling one of its factory - methods: {@link android.animation.ValueAnimator#ofInt ofInt()}, - {@link android.animation.ValueAnimator#ofFloat ofFloat()}, - or {@link android.animation.ValueAnimator#ofObject ofObject()}. For example:

    - -
    ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
    +          
    + + + + + + + + + + + + + +
    ClassDescription
    {@link android.animation.ValueAnimator}The main timing engine for property animation that also computes the values for the + property to be animated. It has all of the core functionality that calculates animation + values and contains the timing details of each animation, information about whether an + animation repeats, listeners that receive update events, and the ability to set custom + types to evaluate. There are two pieces to animating properties: calculating the animated + values and setting those values on the object and property that is being animated. {@link + android.animation.ValueAnimator} does not carry out the second piece, so you must listen + for updates to values calculated by the {@link android.animation.ValueAnimator} and + modify the objects that you want to animate with your own logic. See the section about + Animating with ValueAnimator for more information.
    {@link android.animation.ObjectAnimator}A subclass of {@link android.animation.ValueAnimator} that allows you to set a target + object and object property to animate. This class updates the property accordingly when + it computes a new value for the animation. You want to use + {@link android.animation.ObjectAnimator} most of the time, + because it makes the process of animating values on target objects much easier. However, + you sometimes want to use {@link android.animation.ValueAnimator} directly because {@link + android.animation.ObjectAnimator} has a few more restrictions, such as requiring specific + acessor methods to be present on the target object.
    {@link android.animation.AnimatorSet}Provides a mechanism to group animations together so that they run in + relation to one another. You can set animations to play together, sequentially, or after + a specified delay. See the section about Choreographing multiple + animations with Animator Sets for more information.
    + + +

    Evaluators tell the property animation system how to calculate values for a given + property. They take the timing data that is provided by an {@link android.animation.Animator} + class, the animation's start and end value, and calculate the animated values of the property + based on this data. The property animation system provides the following evaluators:

    +

    Table 2. Evaluators

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class/InterfaceDescription
    {@link android.animation.IntEvaluator}The default evaluator to calculate values for int properties.
    {@link android.animation.FloatEvaluator}The default evaluator to calculate values for float properties.
    {@link android.animation.ArgbEvaluator}The default evaluator to calculate values for color properties that are represented + as hexidecimal values.
    {@link android.animation.TypeEvaluator}An interface that allows you to create your own evaluator. If you are animating an + object property that is not an int, float, or color, + you must implement the {@link android.animation.TypeEvaluator} interface to specify how + to compute the object property's animated values. You can also specify a custom {@link + android.animation.TypeEvaluator} for int, float, and color + values as well, if you want to process those types differently than the default behavior. + See the section about Using a TypeEvaluator for more + information on how to write a custom evaluator.
    + + + + +

    A time interpolator defines how specific values in an animation are calculated as a + function of time. For example, you can specify animations to happen linearly across the whole + animation, meaning the animation moves evenly the entire time, or you can specify animations + to use non-linear time, for example, accelerating at the beginning and decelerating at the + end of the animation. Table 3 describes the interpolators that are contained in {@link + android.view.animation android.view.animation}. If none of the provided interpolators suits + your needs, implement the {@link android.animation.TimeInterpolator} interface and create your own. See Using interpolators for more information on how to write a custom + interpolator.

    +

    Table 3. Interpolators

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class/InterfaceDescription
    {@link android.view.animation.AccelerateDecelerateInterpolator}An interpolator whose rate of change starts and ends slowly but accelerates + through the middle.
    {@link android.view.animation.AccelerateInterpolator}An interpolator whose rate of change starts out slowly and then + accelerates.
    {@link android.view.animation.AnticipateInterpolator}An interpolator whose change starts backward then flings forward.
    {@link android.view.animation.AnticipateOvershootInterpolator}An interpolator whose change starts backward, flings forward and overshoots + the target value, then finally goes back to the final value.
    {@link android.view.animation.BounceInterpolator}An interpolator whose change bounces at the end.
    {@link android.view.animation.CycleInterpolator}An interpolator whose animation repeats for a specified number of cycles.
    {@link android.view.animation.DecelerateInterpolator}An interpolator whose rate of change starts out quickly and and then + decelerates.
    {@link android.view.animation.LinearInterpolator}An interpolator whose rate of change is constant.
    {@link android.view.animation.OvershootInterpolator}An interpolator whose change flings forward and overshoots the last value then + comes back.
    {@link android.animation.TimeInterpolator}An interface that allows you to implement your own interpolator.
    + +

    Animating with ValueAnimator

    + +

    The {@link android.animation.ValueAnimator} class lets you animate values of some type for the + duration of an animation by specifying a set of int, float, or color + values to animate through. You obtain a {@link android.animation.ValueAnimator} by calling one of + its factory methods: {@link android.animation.ValueAnimator#ofInt ofInt()}, {@link + android.animation.ValueAnimator#ofFloat ofFloat()}, or {@link + android.animation.ValueAnimator#ofObject ofObject()}. For example:

    +
    +ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
     animation.setDuration(1000);
     animation.start();        
     
    -

    In this code, the {@link android.animation.ValueAnimator} starts - calculating the values of the animation, between 0 and 1, for - a duration of 1000 ms, when the start() method runs.

    +

    In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the + animation, between 0 and 1, for a duration of 1000 ms, when the start() method + runs.

    You can also specify a custom type to animate by doing the following:

    - -
    ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
    +  
    +ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
     animation.setDuration(1000);
     animation.start();        
     
    -

    In this code, the {@link android.animation.ValueAnimator} starts - calculating the values of the animation, between startPropertyValue and - endPropertyValue using the logic supplied by MyTypeEvaluator - for a duration of 1000 ms, when the {@link android.animation.ValueAnimator#start start()} - method runs.

    +

    In this code, the {@link android.animation.ValueAnimator} starts calculating the values of the + animation, between startPropertyValue and endPropertyValue using the + logic supplied by MyTypeEvaluator for a duration of 1000 ms, when the {@link + android.animation.ValueAnimator#start start()} method runs.

    -

    The previous code snippets, however, do not affect an object, because the {@link - android.animation.ValueAnimator} does not operate on objects or properties directly. To - use the results of a {@link android.animation.ValueAnimator}, you must define listeners - in the {@link android.animation.ValueAnimator} to appropriately handle important events - during the animation's lifespan, such as frame updates. You can implement the following - interfaces to create listeners for {@link android.animation.ValueAnimator}:

    +

    The previous code snippets, however, has no real effect on an object, because the {@link + android.animation.ValueAnimator} does not operate on objects or properties directly. The most likely thing + that you want to do is modify the objects that you want to animate with these calculated values. You do + this by defining listeners in the {@link android.animation.ValueAnimator} to appropriately handle important events + during the animation's lifespan, such as frame updates. When implementing the listeners, you can + obtain the calculated value for that specific frame refresh by calling {@link + android.animation.ValueAnimator#getAnimatedValue getAnimatedValue()}. For more information on listeners, + see the section about Animation Listeners. + +

    Animating with ObjectAnimator

    + +

    The {@link android.animation.ObjectAnimator} is a subclass of the {@link + android.animation.ValueAnimator} (discussed in the previous section) and combines the timing + engine and value computation of {@link android.animation.ValueAnimator} with the ability to + animate a named property of a target object. This makes animating any object much easier, as you + no longer need to implement the {@link android.animation.ValueAnimator.AnimatorUpdateListener}, + because the animated property updates automatically.

    + +

    Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link + android.animation.ValueAnimator}, but you also specify the object and the name of that object's property (as + a String) along with the values to animate between:

    +
    +ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
    +anim.setDuration(1000);
    +anim.start();
    +
    + +

    To have the {@link android.animation.ObjectAnimator} update properties correctly, you must do + the following:

    + + + +

    Choreographing Multiple Animations with AnimatorSet

    + +

    In many cases, you want to play an animation that depends on when another animation starts or + finishes. The Android system lets you bundle animations together into an {@link + android.animation.AnimatorSet}, so that you can specify whether to start animations + simultaneously, sequentially, or after a specified delay. You can also nest {@link + android.animation.AnimatorSet} objects within each other.

    + +

    The following sample code taken from the Bouncing + Balls sample (modified for simplicity) plays the following {@link android.animation.Animator} + objects in the following manner:

    + +
      +
    1. Plays bounceAnim.
    2. + +
    3. Plays squashAnim1, squashAnim2, stretchAnim1, and + stretchAnim2 at the same time.
    4. + +
    5. Plays bounceBackAnim.
    6. + +
    7. Plays fadeAnim.
    8. +
    +
    +AnimatorSet bouncer = new AnimatorSet();
    +bouncer.play(bounceAnim).before(squashAnim1);
    +bouncer.play(squashAnim1).with(squashAnim2);
    +bouncer.play(squashAnim1).with(stretchAnim1);
    +bouncer.play(squashAnim1).with(stretchAnim2);
    +bouncer.play(bounceBackAnim).after(stretchAnim2);
    +ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
    +fadeAnim.setDuration(250);
    +AnimatorSet animatorSet = new AnimatorSet();
    +animatorSet.play(bouncer).before(fadeAnim);
    +animatorSet.start();
    +
    + +

    For a more complete example on how to use animator sets, see the Bouncing + Balls sample in APIDemos.

    + +

    Animation Listeners

    +

    +You can listen for important events during an animation's duration with the listeners described below. +

    +

    You can extend the {@link android.animation.AnimatorListenerAdapter} class instead of +implementing the {@link android.animation.Animator.AnimatorListener} interface, if you do not +want to implement all of the methods of the {@link android.animation.Animator.AnimatorListener} +interface. The {@link android.animation.AnimatorListenerAdapter} class provides empty +implementations of the methods that you can choose to override.

    For example, the - Bouncing Balls sample in the API demos creates an {@link - android.animation.AnimatorListenerAdapter} for just the {@link - android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()} + "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html">Bouncing + Balls sample in the API demos creates an {@link android.animation.AnimatorListenerAdapter} + for just the {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()} callback:

    - -
    ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
    +  
    +ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
     fadeAnim.setDuration(250);
     fadeAnim.addListener(new AnimatorListenerAdapter() {
     public void onAnimationEnd(Animator animation) {
         balls.remove(((ObjectAnimator)animation).getTarget());
    -}
    +} +
    -

    Animating with ObjectAnimator

    -

    The {@link android.animation.ObjectAnimator} is a subclass of the {@link - android.animation.ValueAnimator} (discussed in the previous section) - and combines the timing engine and value computation - of {@link android.animation.ValueAnimator} with the ability to animate a named property - of a target object. This makes animating any object much easier, as you no longer need - to implement the {@link android.animation.ValueAnimator.AnimatorUpdateListener}, because - the animated property updates automatically.

    +

    Animating Layout Changes to ViewGroups

    -

    Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link - android.animation.ValueAnimator}, but you also specify the object and that object's - property (as a String) that you want to animate:

    -
    ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
    -anim.setDuration(1000);
    -anim.start();
    +

    The property animation system provides the capability to animate changes to ViewGroup objects + as well as provide an easy way to animate View objects themselves.

    -

    To have the {@link android.animation.ObjectAnimator} update properties correctly, - you must do the following:

    +

    You can animate layout changes within a ViewGroup with the {@link + android.animation.LayoutTransition} class. Views inside a ViewGroup can go through an appearing + and disappearing animation when you add them to or remove them from a ViewGroup or when you call + a View's {@link android.view.View#setVisibility setVisibility()} method with {@link + android.view.View#VISIBLE}, android.view.View#INVISIBLE}, or {@link android.view.View#GONE}. The remaining Views in the + ViewGroup can also animate into their new positions when you add or remove Views. You can define + the following animations in a {@link android.animation.LayoutTransition} object by calling {@link + android.animation.LayoutTransition#setAnimator setAnimator()} and passing in an {@link + android.animation.Animator} object with one of the following {@link + android.animation.LayoutTransition} constants:

    -

    Using a TypeEvaluator

    +

    You can define your own custom animations for these four types of events to customize the look + of your layout transitions or just tell the animation system to use the default animations.

    -

    If you want to animate a type that is unknown to the Android system, - you can create your own evaluator by implementing the {@link - android.animation.TypeEvaluator} interface. The types that are known by the Android - system are int, float, or a color, which are supported by the - {@link android.animation.IntEvaluator}, {@link android.animation.FloatEvaluator}, and - {@link android.animation.ArgbEvaluator} type evaluators.

    +

    The + LayoutAnimations sample in API Demos shows you how to define animations for layout + transitions and then set the animations on the View objects that you want to animate.

    + +

    The + LayoutAnimationsByDefault and its corresponding layout_animations_by_default.xml + layout resource file show you how to enable the default layout transitions for ViewGroups in XML. + The only thing that you need to do is to set the android:animateLayoutchanges + attribute to true for the ViewGroup. For example:

    +
    +<LinearLayout
    +    android:orientation="vertical"
    +    android:layout_width="wrap_content"
    +    android:layout_height="match_parent"
    +    android:id="@+id/verticalContainer"
    +    android:animateLayoutChanges="true" />  
    +
    + +

    Setting this attribute to true automatically animates Views that are added or removed from the + ViewGroup as well as the remaining Views in the ViewGroup.

    + +

    Using a TypeEvaluator

    + +

    If you want to animate a type that is unknown to the Android system, you can create your own + evaluator by implementing the {@link android.animation.TypeEvaluator} interface. The types that + are known by the Android system are int, float, or a color, which are + supported by the {@link android.animation.IntEvaluator}, {@link + android.animation.FloatEvaluator}, and {@link android.animation.ArgbEvaluator} type + evaluators.

    There is only one method to implement in the {@link android.animation.TypeEvaluator} - interface, the {@link android.animation.TypeEvaluator#evaluate evaluate()} method. - This allows the animator that you are using to return an - appropriate value for your animated property at the current point of the animation. The - {@link android.animation.FloatEvaluator} class demonstrates how to do this:

    -
    public class FloatEvaluator implements TypeEvaluator {
    +  interface, the {@link android.animation.TypeEvaluator#evaluate evaluate()} method. This allows
    +  the animator that you are using to return an appropriate value for your animated property at the
    +  current point of the animation. The {@link android.animation.FloatEvaluator} class demonstrates
    +  how to do this:

    +
    +public class FloatEvaluator implements TypeEvaluator {
     
         public Object evaluate(float fraction, Object startValue, Object endValue) {
             float startFloat = ((Number) startValue).floatValue();
             return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
         }
    -}
    +} +
    -

    Note: When {@link android.animation.ValueAnimator} (or - {@link android.animation.ObjectAnimator}) runs, it calculates a current elapsed - fraction of the animation (a value between 0 and 1) and then calculates an eased - version of that depending on what interpolator that you are using. The eased fraction - is what your {@link android.animation.TypeEvaluator} receives through the fraction - parameter, so you do not have to take into account the interpolator - when calculating animated values.

    +

    Note: When {@link android.animation.ValueAnimator} (or {@link + android.animation.ObjectAnimator}) runs, it calculates a current elapsed fraction of the + animation (a value between 0 and 1) and then calculates an interpolated version of that depending + on what interpolator that you are using. The interpolated fraction is what your {@link + android.animation.TypeEvaluator} receives through the fraction parameter, so you do + not have to take into account the interpolator when calculating animated values.

    -

    Using interpolators

    +

    Using Interpolators

    -

    An interpolator define how specific values in an animation are - calculated as a function of time. For example, you can specify animations to happen - linearly across the whole animation, meaning the animation moves evenly the entire - time, or you can specify animations to use non-linear time, for example, using - acceleration or deceleration at the beginning or end of the animation.

    - -

    Interpolators in the animation system receive a fraction from Animators that represent the elapsed time - of the animation. Interpolators modify this fraction to coincide with the type of - animation that it aims to provide. The Android system provides a set of common - interpolators in the {@link android.view.animation android.view.animation package}. If - none of these suit your needs, you can implement the {@link - android.animation.TimeInterpolator} interface and create your own.

    +

    An interpolator define how specific values in an animation are calculated as a function of + time. For example, you can specify animations to happen linearly across the whole animation, + meaning the animation moves evenly the entire time, or you can specify animations to use + non-linear time, for example, using acceleration or deceleration at the beginning or end of the + animation.

    + +

    Interpolators in the animation system receive a fraction from Animators that represent the + elapsed time of the animation. Interpolators modify this fraction to coincide with the type of + animation that it aims to provide. The Android system provides a set of common interpolators in + the {@link android.view.animation android.view.animation package}. If none of these suit your + needs, you can implement the {@link android.animation.TimeInterpolator} interface and create your + own.

    As an example, how the default interpolator {@link android.view.animation.AccelerateDecelerateInterpolator} and the {@link - android.view.animation.LinearInterpolator} calculate eased fractions are compared below. The {@link - android.view.animation.LinearInterpolator} has no effect on the elapsed fraction, - because a linear interpolation is calculated the same way as the elapsed fraction. The - {@link android.view.animation.AccelerateDecelerateInterpolator} accelerates into the - animation and decelerates out of it. The following methods define the logic for these - interpolators:

    + android.view.animation.LinearInterpolator} calculate interpolated fractions are compared below. + The {@link android.view.animation.LinearInterpolator} has no effect on the elapsed fraction. The {@link + android.view.animation.AccelerateDecelerateInterpolator} accelerates into the animation and + decelerates out of it. The following methods define the logic for these interpolators:

    AccelerateDecelerateInterpolator

    -
    public float getInterpolation(float input) {
    +  
    +public float getInterpolation(float input) {
         return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
    -}
    +} +

    LinearInterpolator

    -
    public float getInterpolation(float input) {
    +  
    +public float getInterpolation(float input) {
         return input;
    -}
    +} +

    The following table represents the approximate values that are calculated by these interpolators for an animation that lasts 1000ms:

    @@ -423,9 +729,9 @@ anim.start();
    ms elapsed - Elapsed fraction/Eased fraction (Linear) + Elapsed fraction/Interpolated fraction (Linear) - Eased fraction (Accelerate/Decelerate) + Interpolated fraction (Accelerate/Decelerate) @@ -477,152 +783,167 @@ anim.start(); -

    As the table shows, the {@link android.view.animation.LinearInterpolator} changes - the values at the same speed, .2 for every 200ms that passes. The {@link - android.view.animation.AccelerateDecelerateInterpolator} changes the values faster than - {@link android.view.animation.LinearInterpolator} between 200ms and 600ms and slower - between 600ms and 1000ms.

    +

    As the table shows, the {@link android.view.animation.LinearInterpolator} changes the values + at the same speed, .2 for every 200ms that passes. The {@link + android.view.animation.AccelerateDecelerateInterpolator} changes the values faster than {@link + android.view.animation.LinearInterpolator} between 200ms and 600ms and slower between 600ms and + 1000ms.

    -

    Specifying keyframes

    +

    Specifying Keyframes

    -

    A {@link android.animation.Keyframe} object consists of a time/value pair that lets - you define a specific state at a specific time of an animation. Each keyframe can also - have its own interpolator to control the behavior of the animation in the interval - between the previous keyframe's time and the time of this keyframe.

    +

    A {@link android.animation.Keyframe} object consists of a time/value pair that lets you define + a specific state at a specific time of an animation. Each keyframe can also have its own + interpolator to control the behavior of the animation in the interval between the previous + keyframe's time and the time of this keyframe.

    -

    To instantiate a {@link android.animation.Keyframe} object, you must use one of the - factory methods, {@link android.animation.Keyframe#ofInt ofInt()}, {@link - android.animation.Keyframe#ofFloat ofFloat()}, or {@link - android.animation.Keyframe#ofObject ofObject()} to obtain the appropriate type of - {@link android.animation.Keyframe}. You then call the {@link - android.animation.PropertyValuesHolder#ofKeyframe ofKeyframe()} factory method to - obtain a {@link android.animation.PropertyValuesHolder} object. Once you have the - object, you can obtain an animator by passing in the {@link - android.animation.PropertyValuesHolder} object and the object to animate. The following - code snippet demonstrates how to do this:

    -
    Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
    -Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
    +  

    To instantiate a {@link android.animation.Keyframe} object, you must use one of the factory + methods, {@link android.animation.Keyframe#ofInt ofInt()}, {@link + android.animation.Keyframe#ofFloat ofFloat()}, or {@link android.animation.Keyframe#ofObject + ofObject()} to obtain the appropriate type of {@link android.animation.Keyframe}. You then call + the {@link android.animation.PropertyValuesHolder#ofKeyframe ofKeyframe()} factory method to + obtain a {@link android.animation.PropertyValuesHolder} object. Once you have the object, you can + obtain an animator by passing in the {@link android.animation.PropertyValuesHolder} object and + the object to animate. The following code snippet demonstrates how to do this:

    +
    +Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
    +Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
     Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
     PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
     ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
     rotationAnim.setDuration(5000ms);
     
    -

    For a more complete example on how to use keyframes, see the + +

    For a more complete example on how to use keyframes, see the MultiPropertyAnimation sample in APIDemos.

    -

    Choreographing multiple animations with AnimatorSet

    +

    Animating Views

    -

    In many cases, you want to play an animation that depends on when another animation - starts or finishes. The Android system lets you bundle animations together into an - {@link android.animation.AnimatorSet}, so that you can specify whether to start animations - simultaneously, sequentially, or after a specified delay. You can also nest {@link - android.animation.AnimatorSet} objects within each other.

    +

    The property animation system allow streamlined animation of View objects and offerse + a few advantages over the view animation system. The view + animation system transformed View objects by changing the way that they were drawn. This was + handled in the container of each View, because the View itself had no properties to manipulate. + This resulted in the View being animated, but caused no change in the View object itself. This + led to behavior such as an object still existing in its original location, even though it was + drawn on a different location on the screen. In Android 3.0, new properties and the corresponding + getter and setter methods were added to eliminate this drawback.

    +

    The property animation system + can animate Views on the screen by changing the actual properties in the View objects. In + addition, Views also automatically call the {@link android.view.View#invalidate invalidate()} + method to refresh the screen whenever its properties are changed. The new properties in the {@link + android.view.View} class that facilitate property animations are:

    -

    The following sample code taken from the - Bouncing Balls sample (modified for simplicity) plays the following - {@link android.animation.Animator} objects in the following manner:

    + + +

    To animate a property of a View object, such as its color or rotation value, all you need to + do is create a property animator and specify the View property that you want to + animate. For example:

    +
    +ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
     
    -

    For a more complete example on how to use animator sets, see the - Bouncing Balls sample in APIDemos.

    +For more information on creating animators, see the sections on animating with +ValueAnimator and ObjectAnimator -

    Declaring animations in XML

    +

    Declaring Animations in XML

    -

    As with view animation, you can declare property animations with - XML instead of doing it programmatically. The following Android classes also have XML - declaration support with the following XML tags:

    +

    The property animation system lets you declare property animations with XML instead of doing + it programmatically. The following Android classes have XML declaration support with the + following XML tags:

    Both <animator> ({@link android.animation.ValueAnimator}) and - <objectAnimator> ({@link android.animation.ObjectAnimator}) have the - following attributes:

    + <objectAnimator> ({@link android.animation.ObjectAnimator}) have the following + attributes:

    -
    -
    android:duration
    -
    The number of milliseconds that the animation runs.
    - -
    android:valueFrom and android:valueTo
    -
    The values being animated - between. These are restricted to numbers (float or int) in - XML. They can be float, int, or any kind of - Object when creating animations programmatically.
    - -
    android:valueType
    -
    Set to either "floatType" or "intType".
    - -
    android:startDelay
    -
    The delay, in milliseconds, before the animation begins - playing (after calling {@link android.animation.ValueAnimator#start start()}).
    - -
    android:repeatCount
    -
    How many times to repeat an animation. Set to - "-1" for infinite repeating or to a positive integer. For example, a value of - "1" means that the animation is repeated once after the initial run of the - animation, so the animation plays a total of two times. The default value is - "0".
    +
    +
    android:duration
    -
    android:repeatMode
    -
    How an animation behaves when it reaches the end of the - animation. android:repeatCount must be set to a positive integer or - "-1" for this attribute to have an effect. Set to "reverse" to - have the animation reverse direction with each iteration or "repeat" to - have the animation loop from the beginning each time.
    +
    The number of milliseconds that the animation runs. The default is 300 ms.
    + +
    android:valueFrom and android:valueTo
    + +
    The values being animated between. These are restricted to numbers (float or + int) and color values (such as #00ff00). They can be float, int, colors, + or any kind of Object when creating animations programmatically.
    + +
    android:valueType
    + +
    Set to either "floatType" or "intType". The default is + "floatType" unless you specify something else or if the valuesFrom + and valuesTo values are colors.
    + +
    android:startDelay
    + +
    The delay, in milliseconds, before the animation begins playing (after calling {@link + android.animation.ValueAnimator#start start()}).
    + +
    android:repeatCount
    + +
    How many times to repeat an animation. Set to "-1" to infinitely repeat or + to a positive integer. For example, a value of "1" means that the animation is + repeated once after the initial run of the animation, so the animation plays a total of two + times. The default value is "0", which means no repetition.
    + +
    android:repeatMode
    + +
    How an animation behaves when it reaches the end of the animation. + android:repeatCount must be set to a positive integer or "-1" for + this attribute to have an effect. Set to "reverse" to have the animation reverse + direction with each iteration or "repeat" to have the animation loop from the + beginning each time.
    - +

    The objectAnimator ({@link android.animation.ObjectAnimator}) element has the - additional attribute propertyName, that lets you specify the name of the - property being animated. The objectAnimator element does not expose a - target attribute, however, so you cannot set the object to animate in the - XML declaration. You have to inflate the XML resource by calling - {@link android.animation.AnimatorInflater#loadAnimator loadAnimator()} and call - {@link android.animation.ObjectAnimator#setTarget setTarget()} to set the target object, before calling - {@link android.animation.ObjectAnimator#start start()}.

    + additional attribute propertyName, that lets you specify the name of the property + being animated. The objectAnimator element does not expose a target + attribute, however, so you cannot set the object to animate in the XML declaration. You have to + inflate the XML resource by calling {@link android.animation.AnimatorInflater#loadAnimator + loadAnimator()} and call {@link android.animation.ObjectAnimator#setTarget setTarget()} to set + the target object unlike the underlying {@link android.animation.ObjectAnimator}, + before calling {@link android.animation.ObjectAnimator#start start()}.

    The set element ({@link android.animation.AnimatorSet}) exposes a single - attribute, ordering. Set this attribute to together (default) - to play all the animations in this set at once. Set this attribute to - sequentially to play the animations in the order they are declared.

    + attribute, ordering. Set this attribute to together (default) to play + all the animations in this set at once. Set this attribute to sequentially to play + the animations in the order they are declared.

    -

    You can specify nested set tags to further group animations together. - The animations that you want to group together should be children of the - set tag and can define their own ordering attribute.

    +

    You can specify nested set tags to further group animations together. The + animations that you want to group together should be children of the set tag and can + define their own ordering attribute.

    -

    As an example, this XML code creates an {@link android.animation.AnimatorSet} object - that animates x and y at the same time (together is the default ordering - when nothing is specified), then runs an animation that fades an object out:

    -
    <set android:ordering="sequentially">
    +  

    As an example, this XML code creates an {@link android.animation.AnimatorSet} object that + animates x and y at the same time, then runs an animation that fades an object out:

    +
    +<set android:ordering="sequentially">
         <set>
             <objectAnimator
                 android:propertyName="x"
    @@ -639,190 +960,11 @@ animatorSet.start();
             android:propertyName="alpha"
             android:duration="500"
             android:valueTo="0f"/>
    -</set>
    - -

    In order to run this animation, you must inflate the XML resources in your code to - an {@link android.animation.AnimatorSet} object, and then set the target objects for all of - the animations before starting the animation set. Calling {@link - android.animation.AnimatorSet#setTarget setTarget()} sets a single target object for - all children of the {@link android.animation.AnimatorSet}.

    - -

    View Animation

    You can use View Animation in any View - object to perform tweened animation and frame by frame animation. Tween animation - calculates the animation given information such as the start point, end point, size, - rotation, and other common aspects of an animation. Frame by frame animation lets you - load a series of Drawable resources one after another to create an animation. - -

    Tween Animation

    - -

    A tween animation can perform a series of simple transformations (position, size, - rotation, and transparency) on the contents of a View object. So, if you have a - {@link android.widget.TextView} object, you can move, rotate, grow, or shrink the text. If it has a background - image, the background image will be transformed along with the text. The {@link - android.view.animation animation package} provides all the classes used in a tween - animation.

    - -

    A sequence of animation instructions defines the tween animation, defined by either - XML or Android code. As with defining a layout, an XML file is recommended because it's - more readable, reusable, and swappable than hard-coding the animation. In the example - below, we use XML. (To learn more about defining an animation in your application code, - instead of XML, refer to the {@link android.view.animation.AnimationSet} class and - other {@link android.view.animation.Animation} subclasses.)

    - -

    The animation instructions define the transformations that you want to occur, when - they will occur, and how long they should take to apply. Transformations can be - sequential or simultaneous — for example, you can have the contents of a TextView - move from left to right, and then rotate 180 degrees, or you can have the text move and - rotate simultaneously. Each transformation takes a set of parameters specific for that - transformation (starting size and ending size for size change, starting angle and - ending angle for rotation, and so on), and also a set of common parameters (for - instance, start time and duration). To make several transformations happen - simultaneously, give them the same start time; to make them sequential, calculate the - start time plus the duration of the preceding transformation.

    - -

    The animation XML file belongs in the res/anim/ directory of your - Android project. The file must have a single root element: this will be either a single - <alpha>, <scale>, <translate>, - <rotate>, interpolator element, or <set> element - that holds groups of these elements (which may include another - <set>). By default, all animation instructions are applied - simultaneously. To make them occur sequentially, you must specify the - startOffset attribute, as shown in the example below.

    - -

    The following XML from one of the ApiDemos is used to stretch, then simultaneously - spin and rotate a View object.

    -
    <set android:shareInterpolator="false">
    -    <scale
    -        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    -        android:fromXScale="1.0"
    -        android:toXScale="1.4"
    -        android:fromYScale="1.0"
    -        android:toYScale="0.6"
    -        android:pivotX="50%"
    -        android:pivotY="50%"
    -        android:fillAfter="false"
    -        android:duration="700" />
    -    <set android:interpolator="@android:anim/decelerate_interpolator">
    -        <scale
    -           android:fromXScale="1.4"
    -           android:toXScale="0.0"
    -           android:fromYScale="0.6"
    -           android:toYScale="0.0"
    -           android:pivotX="50%"
    -           android:pivotY="50%"
    -           android:startOffset="700"
    -           android:duration="400"
    -           android:fillBefore="false" />
    -        <rotate
    -           android:fromDegrees="0"
    -           android:toDegrees="-45"
    -           android:toYScale="0.0"
    -           android:pivotX="50%"
    -           android:pivotY="50%"
    -           android:startOffset="700"
    -           android:duration="400" />
    -    </set>
    -</set>
    - -

    Screen coordinates (not used in this example) are (0,0) at the upper left hand - corner, and increase as you go down and to the right.

    - -

    Some values, such as pivotX, can be specified relative to the object itself or - relative to the parent. Be sure to use the proper format for what you want ("50" for - 50% relative to the parent, or "50%" for 50% relative to itself).

    - -

    You can determine how a transformation is applied over time by assigning an {@link - android.view.animation.Interpolator}. Android includes several Interpolator subclasses - that specify various speed curves: for instance, {@link - android.view.animation.AccelerateInterpolator} tells a transformation to start slow and - speed up. Each one has an attribute value that can be applied in the XML.

    - -

    With this XML saved as hyperspace_jump.xml in the - res/anim/ directory of the project, the following code will reference - it and apply it to an {@link android.widget.ImageView} object from the layout.

    -
    -ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
    -Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    -spaceshipImage.startAnimation(hyperspaceJumpAnimation);
    +</set>
     
    -

    As an alternative to startAnimation(), you can define a starting time - for the animation with {@link android.view.animation.Animation#setStartTime(long) - Animation.setStartTime()}, then assign the animation to the View with - {@link android.view.View#setAnimation(android.view.animation.Animation) - View.setAnimation()}.

    - -

    For more information on the XML syntax, available tags and attributes, see Animation Resources.

    - -

    Note: Regardless of how your animation may move or - resize, the bounds of the View that holds your animation will not automatically adjust - to accommodate it. Even so, the animation will still be drawn beyond the bounds of its - View and will not be clipped. However, clipping will occur if the animation - exceeds the bounds of the parent View.

    - -

    Frame Animation

    - -

    This is a traditional animation in the sense that it is created with a sequence of - different images, played in order, like a roll of film. The {@link - android.graphics.drawable.AnimationDrawable} class is the basis for frame - animations.

    - -

    While you can define the frames of an animation in your code, using the {@link - android.graphics.drawable.AnimationDrawable} class API, it's more simply accomplished - with a single XML file that lists the frames that compose the animation. Like the tween - animation above, the XML file for this kind of animation belongs in the - res/drawable/ directory of your Android project. In this case, the - instructions are the order and duration for each frame of the animation.

    - -

    The XML file consists of an <animation-list> element as the root - node and a series of child <item> nodes that each define a frame: a - drawable resource for the frame and the frame duration. Here's an example XML file for - a frame-by-frame animation:

    -
    -<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    -    android:oneshot="true">
    -    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    -    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    -    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
    -</animation-list>
    -
    - -

    This animation runs for just three frames. By setting the - android:oneshot attribute of the list to true, it will cycle - just once then stop and hold on the last frame. If it is set false then the - animation will loop. With this XML saved as rocket_thrust.xml in the - res/drawable/ directory of the project, it can be added as the background - image to a View and then called to play. Here's an example Activity, in which the - animation is added to an {@link android.widget.ImageView} and then animated when the - screen is touched:

    -
    AnimationDrawable rocketAnimation;
    -
    -public void onCreate(Bundle savedInstanceState) {
    -  super.onCreate(savedInstanceState);
    -  setContentView(R.layout.main);
    -
    -  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    -  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
    -  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
    -}
    -
    -public boolean onTouchEvent(MotionEvent event) {
    -  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    -    rocketAnimation.start();
    -    return true;
    -  }
    -  return super.onTouchEvent(event);
    -}
    - -

    It's important to note that the start() method called on the - AnimationDrawable cannot be called during the onCreate() method of your - Activity, because the AnimationDrawable is not yet fully attached to the window. If you - want to play the animation immediately, without requiring interaction, then you might - want to call it from the {@link - android.app.Activity#onWindowFocusChanged(boolean) onWindowFocusChanged()} - method in your Activity, which will get called when Android brings your window into - focus.

    - -

    For more information on the XML syntax, available tags and attributes, see Animation Resources.

    \ No newline at end of file +

    In order to run this animation, you must inflate the XML resources in your code to an {@link + android.animation.AnimatorSet} object, and then set the target objects for all of the animations + before starting the animation set. Calling {@link android.animation.AnimatorSet#setTarget + setTarget()} sets a single target object for all children of the {@link + android.animation.AnimatorSet}.

    \ No newline at end of file diff --git a/docs/html/guide/topics/graphics/view-animation.jd b/docs/html/guide/topics/graphics/view-animation.jd new file mode 100644 index 0000000000000..ad27e1ce18ac0 --- /dev/null +++ b/docs/html/guide/topics/graphics/view-animation.jd @@ -0,0 +1,190 @@ +page.title=View Animation +@jd:body + +
    +
    +

    In this document

    + +
      +
    1. Tween animation
    2. +
    3. Frame animation
    4. +
    + +
    +
    + + You can use View Animation in any View object to + perform tweened animation and frame by frame animation. Tween animation calculates the animation + given information such as the start point, end point, size, rotation, and other common aspects of + an animation. Frame by frame animation lets you load a series of Drawable resources one after + another to create an animation. + +

    Tween Animation

    + +

    A tween animation can perform a series of simple transformations (position, size, rotation, + and transparency) on the contents of a View object. So, if you have a {@link + android.widget.TextView} object, you can move, rotate, grow, or shrink the text. If it has a + background image, the background image will be transformed along with the text. The {@link + android.view.animation animation package} provides all the classes used in a tween animation.

    + +

    A sequence of animation instructions defines the tween animation, defined by either XML or + Android code. As with defining a layout, an XML file is recommended because it's more readable, + reusable, and swappable than hard-coding the animation. In the example below, we use XML. (To + learn more about defining an animation in your application code, instead of XML, refer to the + {@link android.view.animation.AnimationSet} class and other {@link + android.view.animation.Animation} subclasses.)

    + +

    The animation instructions define the transformations that you want to occur, when they will + occur, and how long they should take to apply. Transformations can be sequential or simultaneous + - for example, you can have the contents of a TextView move from left to right, and then rotate + 180 degrees, or you can have the text move and rotate simultaneously. Each transformation takes a + set of parameters specific for that transformation (starting size and ending size for size + change, starting angle and ending angle for rotation, and so on), and also a set of common + parameters (for instance, start time and duration). To make several transformations happen + simultaneously, give them the same start time; to make them sequential, calculate the start time + plus the duration of the preceding transformation.

    + +

    The animation XML file belongs in the res/anim/ directory of your Android + project. The file must have a single root element: this will be either a single + <alpha>, <scale>, <translate>, + <rotate>, interpolator element, or <set> element that holds + groups of these elements (which may include another <set>). By default, all + animation instructions are applied simultaneously. To make them occur sequentially, you must + specify the startOffset attribute, as shown in the example below.

    + +

    The following XML from one of the ApiDemos is used to stretch, then simultaneously spin and + rotate a View object.

    +
    +<set android:shareInterpolator="false">
    +    <scale
    +        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    +        android:fromXScale="1.0"
    +        android:toXScale="1.4"
    +        android:fromYScale="1.0"
    +        android:toYScale="0.6"
    +        android:pivotX="50%"
    +        android:pivotY="50%"
    +        android:fillAfter="false"
    +        android:duration="700" />
    +    <set android:interpolator="@android:anim/decelerate_interpolator">
    +        <scale
    +           android:fromXScale="1.4"
    +           android:toXScale="0.0"
    +           android:fromYScale="0.6"
    +           android:toYScale="0.0"
    +           android:pivotX="50%"
    +           android:pivotY="50%"
    +           android:startOffset="700"
    +           android:duration="400"
    +           android:fillBefore="false" />
    +        <rotate
    +           android:fromDegrees="0"
    +           android:toDegrees="-45"
    +           android:toYScale="0.0"
    +           android:pivotX="50%"
    +           android:pivotY="50%"
    +           android:startOffset="700"
    +           android:duration="400" />
    +    </set>
    +</set>
    +
    + +

    Screen coordinates (not used in this example) are (0,0) at the upper left hand corner, and + increase as you go down and to the right.

    + +

    Some values, such as pivotX, can be specified relative to the object itself or relative to the + parent. Be sure to use the proper format for what you want ("50" for 50% relative to the parent, + or "50%" for 50% relative to itself).

    + +

    You can determine how a transformation is applied over time by assigning an {@link + android.view.animation.Interpolator}. Android includes several Interpolator subclasses that + specify various speed curves: for instance, {@link android.view.animation.AccelerateInterpolator} + tells a transformation to start slow and speed up. Each one has an attribute value that can be + applied in the XML.

    + +

    With this XML saved as hyperspace_jump.xml in the res/anim/ + directory of the project, the following code will reference it and apply it to an {@link + android.widget.ImageView} object from the layout.

    +
    +ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
    +Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    +spaceshipImage.startAnimation(hyperspaceJumpAnimation);
    +
    + +

    As an alternative to startAnimation(), you can define a starting time for the + animation with {@link android.view.animation.Animation#setStartTime(long) + Animation.setStartTime()}, then assign the animation to the View with {@link + android.view.View#setAnimation(android.view.animation.Animation) View.setAnimation()}.

    + +

    For more information on the XML syntax, available tags and attributes, see Animation Resources.

    + +

    Note: Regardless of how your animation may move or resize, the + bounds of the View that holds your animation will not automatically adjust to accommodate it. + Even so, the animation will still be drawn beyond the bounds of its View and will not be clipped. + However, clipping will occur if the animation exceeds the bounds of the parent View.

    + +

    Frame Animation

    + +

    This is a traditional animation in the sense that it is created with a sequence of different + images, played in order, like a roll of film. The {@link + android.graphics.drawable.AnimationDrawable} class is the basis for frame animations.

    + +

    While you can define the frames of an animation in your code, using the {@link + android.graphics.drawable.AnimationDrawable} class API, it's more simply accomplished with a + single XML file that lists the frames that compose the animation. Like the tween animation above, + the XML file for this kind of animation belongs in the res/drawable/ directory of + your Android project. In this case, the instructions are the order and duration for each frame of + the animation.

    + +

    The XML file consists of an <animation-list> element as the root node and a + series of child <item> nodes that each define a frame: a drawable resource for + the frame and the frame duration. Here's an example XML file for a frame-by-frame animation:

    +
    +<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:oneshot="true">
    +    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    +    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    +    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
    +</animation-list>
    +
    + +

    This animation runs for just three frames. By setting the android:oneshot + attribute of the list to true, it will cycle just once then stop and hold on the last + frame. If it is set false then the animation will loop. With this XML saved as + rocket_thrust.xml in the res/drawable/ directory of the project, it can + be added as the background image to a View and then called to play. Here's an example Activity, + in which the animation is added to an {@link android.widget.ImageView} and then animated when the + screen is touched:

    +
    +AnimationDrawable rocketAnimation;
    +
    +public void onCreate(Bundle savedInstanceState) {
    +  super.onCreate(savedInstanceState);
    +  setContentView(R.layout.main);
    +
    +  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    +  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
    +  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
    +}
    +
    +public boolean onTouchEvent(MotionEvent event) {
    +  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    +    rocketAnimation.start();
    +    return true;
    +  }
    +  return super.onTouchEvent(event);
    +}
    +
    + +

    It's important to note that the start() method called on the AnimationDrawable + cannot be called during the onCreate() method of your Activity, because the + AnimationDrawable is not yet fully attached to the window. If you want to play the animation + immediately, without requiring interaction, then you might want to call it from the {@link + android.app.Activity#onWindowFocusChanged(boolean) onWindowFocusChanged()} method in your + Activity, which will get called when Android brings your window into focus.

    + +

    For more information on the XML syntax, available tags and attributes, see Animation Resources.

    + + diff --git a/docs/html/images/animation/animation-linear.png b/docs/html/images/animation/animation-linear.png new file mode 100644 index 0000000000000000000000000000000000000000..08bd9fc3dc2ce5d151294b1d2b695a490f2e5f00 GIT binary patch literal 35996 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 W@|#xyZDD}pb=Abuxb});{-~e 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 NC3&?sm9I^M{~u4-8>#>R literal 0 HcmV?d00001 diff --git a/docs/html/images/animation/valueanimator.png b/docs/html/images/animation/valueanimator.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc2a13bbfca142b090c3fec00ddf410ca82eeb5 GIT binary patch literal 42031 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