アニメーション リソース

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

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

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

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

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

ファイルの場所:
res/animator/filename.xml
ファイル名はリソース 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=["restart" | "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=["restart" | "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
文字列。必須。アニメーション化するオブジェクトのプロパティ。名前で参照されます。たとえば、View オブジェクトの "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" に設定します。または、毎回最初からアニメーションをループさせるには、"restart" に設定します。
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" に設定します。または、毎回最初からアニメーションをループさせるには、"restart" に設定します。
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
ファイル名はリソース 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 リソース。アニメーションに適用する Interpolator。interpolator のクラス名ではなく、interpolator を指定するリソースへの参照を値とする必要があります。プラットフォームから入手できるデフォルトの interpolator リソースを使用するか、独自の interpolator リソースを作成することができます。interpolator について詳しくは、後述の説明をご覧ください。
android:shareInterpolator
ブール値。すべての子要素の間で同じ interpolator を共有する場合は "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>
垂直方向または水平方向の動き。TranslateAnimation を表します。 下記の属性でサポートされる形式は 3 種類あります。
  • -100~100 の値の後に「%」を付ける(自身に対する割合)
  • -100~100 の値の後に「%p」を付ける(親に対する割合)
  • 接尾辞を付けない浮動小数点数値(絶対値)

属性:

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);
関連項目:

interpolator

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

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

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

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>

カスタム interpolator

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

ファイルの場所:
res/anim/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
対応する interpolator オブジェクトへのリソース ポインタ。
リソースの参照:
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 はプラットフォームから提供されるもの(上記の表に記載)とまったく同じように機能します。

要素:
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 は、interpolator を適用します。

<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
ファイル名はリソース 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_thrust.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>

次のアプリコードはアニメーションを View の背景として設定し、アニメーションを再生します。

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();
}
関連項目: