アニメーション リソース

各アニメーション リソースには、次の 2 種類のアニメーションの 1 つを定義できます。

プロパティ アニメーション
Animator を使って、設定された時間にわたってオブジェクトのプロパティ値を変更することにより、アニメーションを作成します。
ビュー アニメーション

ビュー アニメーション フレームワークで可能なアニメーションは 2 種類あります。

プロパティ アニメーション

XML で定義されるアニメーションで、設定された時間にわたって、背景色やアルファ値など、対象オブジェクトのプロパティを変更します。

ファイルの場所:
res/animator/filename.xml
filename はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
ValueAnimatorObjectAnimator、または AnimatorSet へのリソース ポインタ。
リソースの参照:
Java ベースまたは Kotlin のコード内: R.animator.filename
XML 内: @[package:]animator/filename
構文:
    <set
      android:ordering=["together" | "sequentially"]>

        <objectAnimator
            android:propertyName="string"
            android:duration="int"
            android:valueFrom="float | int | color"
            android:valueTo="float | int | color"
            android:startOffset="int"
            android:repeatCount="int"
            android:repeatMode=["repeat" | "reverse"]
            android:valueType=["intType" | "floatType"]/>

        <animator
            android:duration="int"
            android:valueFrom="float | int | color"
            android:valueTo="float | int | color"
            android:startOffset="int"
            android:repeatCount="int"
            android:repeatMode=["repeat" | "reverse"]
            android:valueType=["intType" | "floatType"]/>

        <set>
            ...
        </set>
    </set>
    

ファイルには単一のルート要素として <set><objectAnimator><valueAnimator> のいずれかが必要です。<set> 要素内にアニメーション要素をグループとしてまとめることができます。他の <set> 要素も含めることができます。

要素:
<set>
他のアニメーション要素(<objectAnimator><valueAnimator>、または他の <set> 要素)を保持するコンテナ。AnimatorSet を表します。

アニメーションをさらにグループにまとめるために、<set> タグのネストを指定できます。各 <set> は独自の ordering 属性を定義できます。

属性:

android:ordering
キーワード。このセット内のアニメーションの再生順序を指定します。
説明
sequentiallyこのセット内のアニメーションを順番に再生します。
together(デフォルト)このセット内のアニメーションを同時に再生します。
<objectAnimator>
オブジェクトの指定のプロパティを、指定の時間にわたってアニメーション化します。ObjectAnimator を表します。

属性:

android:propertyName
文字列。必須。アニメーション化するオブジェクトのプロパティ。名前で参照されます。たとえば、ビュー オブジェクトの "alpha" または "backgroundColor" を指定できます。ただし、objectAnimator 要素は target 属性を公開しないので、XML 宣言でアニメーション化するオブジェクトを設定することはできません。loadAnimator() を呼び出してアニメーション XML リソースをインフレートし、setTarget() を呼び出してこのプロパティを持つ対象オブジェクトを設定する必要があります。
android:valueTo
浮動小数点数、整数、色のいずれか。必須。プロパティ アニメーションが終了するときの値。色は 6 桁の 16 進数で表します(例: #333333)。
android:valueFrom
浮動小数点数、整数、色のいずれか。プロパティ アニメーションが開始するときの値。指定しない場合、アニメーションはプロパティの get メソッドで取得された値から開始します。色は 6 桁の 16 進数で表します(例: #333333)。
android:duration
整数。アニメーションの時間(ミリ秒単位)。デフォルトは 300 ミリ秒です。
android:startOffset
整数。start() が呼び出された後に、アニメーションの開始を遅らせる時間(ミリ秒単位)。
android:repeatCount
整数。アニメーションを繰り返す回数。正の整数に設定するか、無限に繰り返すには "-1" に設定します。たとえば、値 "1" を指定すると、アニメーションは最初の実行後に 1 回繰り返されるので、合計 2 回再生されます。デフォルト値は "0" で、繰り返しはありません。
android:repeatMode
整数。アニメーションが最後に到達したときにどのような動作をするか。この属性が反映されるには、android:repeatCount に正の整数または "-1" を設定します。アニメーションが繰り返されるごとに逆方向に実行するには、"reverse" に設定します。または、毎回最初からアニメーションをループさせるには、"repeat" に設定します。
android:valueType
キーワード。色の値の場合、この属性は指定しないでください。色の値はアニメーション フレームワークが自動的に処理します。
説明
intTypeアニメーション化する値が整数であることを指定します。
floatType(デフォルト)アニメーション化する値が浮動小数点数であることを示します。
<animator>
指定した時間にわたってアニメーションを実行します。ValueAnimator を表します。

属性:

android:valueTo
浮動小数点数、整数、色のいずれか。必須。アニメーションが終了するときの値。色は 6 桁の 16 進数で表します(例: #333333)。
android:valueFrom
浮動小数点数、整数、色のいずれか。必須。アニメーションが開始するときの値。色は 6 桁の 16 進数で表します(例: #333333)。
android:duration
整数。アニメーションの時間(ミリ秒単位)。デフォルトは 300 ミリ秒です。
android:startOffset
整数。start() が呼び出された後に、アニメーションの開始を遅らせる時間(ミリ秒単位)。
android:repeatCount
整数。アニメーションを繰り返す回数。正の整数に設定するか、無限に繰り返すには "-1" に設定します。たとえば、値 "1" を指定すると、アニメーションは最初の実行後に 1 回繰り返されるので、合計 2 回再生されます。デフォルト値は "0" で、繰り返しはありません。
android:repeatMode
整数。アニメーションが最後に到達したときにどのような動作をするか。この属性が反映されるには、android:repeatCount に正の整数または "-1" を設定します。アニメーションが繰り返されるごとに逆方向に実行するには、"reverse" に設定します。または、毎回最初からアニメーションをループさせるには、"repeat" に設定します。
android:valueType
キーワード。色の値の場合、この属性は指定しないでください。色の値はアニメーション フレームワークが自動的に処理します。
説明
intTypeアニメーション化する値が整数であることを指定します。
floatType(デフォルト)アニメーション化する値が浮動小数点数であることを示します。
例:
res/animator/property_animator.xml に保存された XML ファイル:

    <set android:ordering="sequentially">
        <set>
            <objectAnimator
                android:propertyName="x"
                android:duration="500"
                android:valueTo="400"
                android:valueType="intType"/>
            <objectAnimator
                android:propertyName="y"
                android:duration="500"
                android:valueTo="300"
                android:valueType="intType"/>
        </set>
        <objectAnimator
            android:propertyName="alpha"
            android:duration="500"
            android:valueTo="1f"/>
    </set>
    

このアニメーションを実行するには、アニメーション セットを開始する前に、コード内の XML リソースを AnimatorSet オブジェクトにインフレートしてから、すべてのアニメーションの対象オブジェクトを設定する必要があります。setTarget() を呼び出すと、便宜上、AnimatorSet のすべての子に対して単一の対象オブジェクトが設定されます。次のコードに、その方法を示します。

Kotlin

    val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
        .apply {
            setTarget(myObject)
            start()
        }
    

Java

    AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
        R.animator.property_animator);
    set.setTarget(myObject);
    set.start();
    
関連項目:

ビュー アニメーション

ビュー アニメーション フレームワークは、トゥイーン アニメーションとフレームごとのフレーム アニメーションの両方をサポートしており、どちらも XML で宣言できます。以下のセクションでは、両方のメソッドの使用方法について説明します。

トゥイーン アニメーション

XML で定義されるアニメーションで、グラフィック上で回転、フェード、移動、伸縮などの遷移を行います。

ファイルの場所:
res/anim/filename.xml
filename はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
Animation へのリソースのポインタ。
リソースの参照:
Java 内: R.anim.filename
XML 内: @[package:]anim/filename
構文:
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@[package:]anim/interpolator_resource"
        android:shareInterpolator=["true" | "false"] >
        <alpha
            android:fromAlpha="float"
            android:toAlpha="float" />
        <scale
            android:fromXScale="float"
            android:toXScale="float"
            android:fromYScale="float"
            android:toYScale="float"
            android:pivotX="float"
            android:pivotY="float" />
        <translate
            android:fromXDelta="float"
            android:toXDelta="float"
            android:fromYDelta="float"
            android:toYDelta="float" />
        <rotate
            android:fromDegrees="float"
            android:toDegrees="float"
            android:pivotX="float"
            android:pivotY="float" />
        <set>
            ...
        </set>
    </set>
    

ファイルには単一のルート要素が必要です。ルート要素は、<alpha><scale><translate><rotate> のいずれかの要素、または他のアニメーション要素(<set> 要素のネストも可能)のグループを保持する <set> 要素です。

要素:
<set>
他のアニメーション要素(<alpha><scale><translate><rotate>)または他の <set> 要素を保持するコンテナ。AnimationSet を表します。

属性:

android:interpolator
インターポレーター リソース。アニメーションに適用する Interpolator。インターポレーターのクラス名ではなく、インターポレーターを指定するリソースへの参照を値とする必要があります。プラットフォームから入手できるデフォルトのインターポレーター リソースを使用するか、独自のインターポレーター リソースを作成することができます。インターポレーターについて詳しくは、後述の説明をご覧ください。
android:shareInterpolator
ブール値。すべての子要素の間で同じインターポレーターを共有する場合は「true」を指定します。
<alpha>
フェードインまたはフェードアウトのアニメーション。AlphaAnimation を表します。

属性:

android:fromAlpha
浮動小数点数。開始時の不透明オフセット。0.0 は透明、1.0 は不透明です。
android:toAlpha
浮動小数点数。終了時の不透明オフセット。0.0 は透明、1.0 は不透明です。

<alpha> でサポートされる属性について詳しくは、Animation クラスのリファレンスをご覧ください(このクラスの XML 属性はすべてこの要素に継承されます)。

<scale>
アニメーションのサイズを変更します。pivotXpivotY を指定することで、画像の中心点からの拡大(または縮小)を指定できます。たとえば、上記の値が 0, 0 (左上隅)の場合の拡大は、すべて右下に拡大します。ScaleAnimation を表します。

属性:

android:fromXScale
浮動小数点数。開始時の X サイズのオフセット。1.0 の場合変更はありません。
android:toXScale
浮動小数点数。終了時の X サイズのオフセット。1.0 の場合変更はありません。
android:fromYScale
浮動小数点数。開始時の Y サイズのオフセット。1.0 の場合変更はありません。
android:toYScale
浮動小数点数。終了時の Y サイズのオフセット。1.0 の場合変更はありません。
android:pivotX
浮動小数点数。オブジェクトがスケーリングされるときに固定される X 座標。
android:pivotY
浮動小数点数。オブジェクトがスケーリングされるときに固定される Y 座標。

<scale> でサポートされる属性について詳しくは、Animation クラスのリファレンスをご覧ください(このクラスの XML 属性はすべてこの要素に継承されます)。

<translate>
垂直方向または水平方向の動き。下記の属性でサポートされる形式は 3 種類あります。-100~100 の値の後に「%」を付ける(自身に対する割合)、-100~100 の値の後に「%p」を付ける(親に対する割合)、接尾辞を付けない浮動小数点数値(絶対値)の 3 つです。TranslateAnimation を表します。

属性:

android:fromXDelta
浮動小数点数またはパーセンテージ。開始時の X オフセット。指定する形式は、通常の位置に対するピクセル数の相対値(例: "5")、要素の幅に対する割合(例: "5%")、親の幅に対する割合(例: "5%p")のいずれかです。
android:toXDelta
浮動小数点数またはパーセンテージ。終了時の X オフセット。指定する形式は、通常の位置に対するピクセル数の相対値(例: "5")、要素の幅に対する割合(例: "5%")、親の幅に対する割合(例: "5%p")のいずれかです。
android:fromYDelta
浮動小数点数またはパーセンテージ。開始時の Y オフセット。指定する形式は、通常の位置に対するピクセル数の相対値(例: "5")、要素の高さに対する割合(例: "5%")、親の高さに対する割合(例: "5%p")のいずれかです。
android:toYDelta
浮動小数点数またはパーセンテージ。終了時の Y オフセット。指定する形式は、通常の位置に対するピクセル数の相対値(例: "5")、要素の高さに対する割合(例: "5%")、親の高さに対する割合(例: "5%p")のいずれかです。

<translate> でサポートされる属性について詳しくは、Animation クラスのリファレンスをご覧ください(このクラスの XML 属性はすべてこの要素に継承されます)。

<rotate>
回転アニメーション。RotateAnimation を表します。

属性:

android:fromDegrees
浮動小数点数。開始時の回転角度(度単位)。
android:toDegrees
浮動小数点数。終了時の回転角度(度単位)。
android:pivotX
浮動小数点数またはパーセンテージ。回転の中心の X 座標。指定する形式は、オブジェクトの左端からのピクセル数(例: "5")、オブジェクトの左端からの割合(例: "5%")、親コンテナの左端からの割合(例: "5%p")のいずれかです。
android:pivotY
浮動小数点数またはパーセンテージ。回転の中心の Y 座標。指定する形式は、オブジェクトの上端からのピクセル数(例: "5")、オブジェクトの上端からの割合(例: "5%")、親コンテナの上端からの割合(例: "5%p")のいずれかです。

<rotate> でサポートされる属性について詳しくは、Animation クラスのリファレンスをご覧ください(このクラスの XML 属性はすべてこの要素に継承されます)。

例:
res/anim/hyperspace_jump.xml に保存された XML ファイル:

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        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/accelerate_interpolator"
            android:startOffset="700">
            <scale
                android:fromXScale="1.4"
                android:toXScale="0.0"
                android:fromYScale="0.6"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
            <rotate
                android:fromDegrees="0"
                android:toDegrees="-45"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
        </set>
    </set>
    

このアプリコードはアニメーションを ImageView に適用し、アニメーションを開始します。

Kotlin

    val image: ImageView = findViewById(R.id.image)
    val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
    image.startAnimation(hyperspaceJump)
    

Java

    ImageView image = (ImageView) findViewById(R.id.image);
    Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    image.startAnimation(hyperspaceJump);
    
関連項目:

インターポレーター

インターポレーターは、XML で定義されるアニメーション修飾子で、アニメーションの変化の速度に作用します。既存のアニメーション効果を加速、減速、反復、バウンドさせることができます。

android:interpolator 属性によりインターポレーターがアニメーション要素に適用されます。この属性の値は、インターポレーター リソースへの参照です。

Android で利用可能なインターポレーターはすべて Interpolator クラスのサブクラスです。Android では各インターポレーター クラスに対して、デベロッパーが android:interpolator 属性を使ってインターポレーターをアニメーションに適用できるように、参照可能な公開リソースが用意されています。次の表に、各インターポレーターに使用できるリソースを示します。

インターポレーター クラスリソース ID
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

これらのいずれかを android:interpolator 属性を使って適用する方法は次のとおりです。

    <set android:interpolator="@android:anim/accelerate_interpolator">
        ...
    </set>
    

カスタム インターポレーター

プラットフォームから提供されるインターポレーター(上記の表に記載)に満足できない場合は、属性を修正したカスタム インターポレーター リソースを作成できます。たとえば、AnticipateInterpolator の加速度を調整したり、CycleInterpolator の繰り返し回数を調整したりできます。そのためには、独自のインターポレーター リソースを XML ファイルで作成する必要があります。

ファイルの場所:
res/anim/filename.xml
filename はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
対応するインターポレーター オブジェクトへのリソース ポインタ。
リソースの参照:
XML 内: @[package:]anim/filename
構文:
    <?xml version="1.0" encoding="utf-8"?>
    <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
        android:attribute_name="value"
        />
    

属性をまったく指定しない場合、そのインターポレーターはプラットフォームから提供されるもの(上記の表に記載)とまったく同じように機能します。

要素:
Interpolator の各実装が XML で定義されている場合、名前は小文字で始まります。

<accelerateDecelerateInterpolator>
変化の速度は、開始時と終了時にはゆっくりですが、途中で加速されます。

属性はありません。

<accelerateInterpolator>
変化の速度は、開始時はゆっくりで、その後加速されます。

属性:

android:factor
浮動小数点数。加速度(デフォルトは 1)。
<anticipateInterpolator>
変化は逆戻りしてからまたはずみを付けて進みます。

属性:

android:tension
浮動小数点数。適用する張力(デフォルトは 2)。
<anticipateOvershootInterpolator>
変化は逆戻りしてからはずみを付けて進み、目的の値を過ぎてから最終値に落ち着きます。

属性:

android:tension
浮動小数点数。適用する張力(デフォルトは 2)。
android:extraTension
浮動小数点数。張力に掛け合わせる値(デフォルトは 1.5)。
<bounceInterpolator>
変化は終了時にバウンドします。

属性はありません。

<cycleInterpolator>
指定した回数だけアニメーションを繰り返します。変化の速度は正弦波のパターンに従います。

属性:

android:cycles
整数。繰り返し回数(デフォルトは 1)。
<decelerateInterpolator>
変化の速度は最初は速くて、減速されます。

属性:

android:factor
浮動小数点数。減速率(デフォルトは 1)。
<linearInterpolator>
変化の速度は一定です。

属性はありません。

<overshootInterpolator>
変化ははずみを付けて進んで、最終値を過ぎてから、逆戻りします。

属性:

android:tension
浮動小数点数。適用する張力(デフォルトは 2)。
例:

res/anim/my_overshoot_interpolator.xml に保存された XML ファイル:

    <?xml version="1.0" encoding="utf-8"?>
    <overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
        android:tension="7.0"
        />
    

このアニメーション XML は、インターポレーターを適用します。

    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@anim/my_overshoot_interpolator"
        android:fromXScale="1.0"
        android:toXScale="3.0"
        android:fromYScale="1.0"
        android:toYScale="3.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="700" />
    

フレーム アニメーション

XML で定義されるアニメーションで、映画のように一連の画像を順に表示します。

ファイルの場所:
res/drawable/filename.xml
filename はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
AnimationDrawable へのリソースのポインタ。
リソースの参照:
Java 内: R.drawable.filename
XML 内: @[package:]drawable.filename
構文:
    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot=["true" | "false"] >
        <item
            android:drawable="@[package:]drawable/drawable_resource_name"
            android:duration="integer" />
    </animation-list>
    
要素:
<animation-list>
必須。これはルート要素でなければなりません。1 つ以上の <item> 要素が含まれます。

属性:

android:oneshot
ブール値。アニメーションを 1 回実行する場合は「true」、ループさせるには「false」を指定します。
<item>
アニメーションの単一のフレーム。<animation-list> 要素の子を指定する必要があります。

属性:

android:drawable
ドローアブル リソース。このフレームに使用するドローアブル。
android:duration
整数。このフレームを表示する時間(ミリ秒)。
例:
res/drawable/rocket.xml に保存された XML ファイル:
    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
        <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>
    
このアプリコードはアニメーションをビューの背景として設定し、アニメーションを再生します。

Kotlin

    val rocketImage: ImageView = findViewById(R.id.rocket_image)
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

    val rocketAnimation = rocketImage.background
    if (rocketAnimation is Animatable) {
        rocketAnimation.start()
    }

Java

    ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

    rocketAnimation = rocketImage.getBackground();
    if (rocketAnimation instanceof Animatable) {
        ((Animatable)rocketAnimation).start();
    }
関連項目: