各アニメーション リソースには、次の 2 種類のアニメーションの 1 つを定義できます。
- プロパティ アニメーション
Animator
を使って、設定された時間にわたってオブジェクトのプロパティ値を変更することにより、アニメーションを作成します。- ビュー アニメーション
-
ビュー アニメーション フレームワークで可能なアニメーションは 2 種類あります。
- トゥイーン アニメーション:
Animation
を使って、1 つの画像に対して一連の変換を行ってアニメーションを作成します。 - フレーム アニメーション:
AnimationDrawable
を使って、一連の画像を順に表示することでアニメーションを作成します。
- トゥイーン アニメーション:
プロパティ アニメーション
XML で定義されるアニメーションで、設定された時間にわたって、背景色やアルファ値など、対象オブジェクトのプロパティを変更します。
- ファイルの場所:
res/animator/filename.xml
ファイル名はリソース ID として使用されます。- コンパイルされるリソースのデータ型:
ValueAnimator
、ObjectAnimator
、または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>
要素も含めることができます。 - 要素:
- 例:
-
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
のすべての子に対して単一の対象オブジェクトが設定されます。次のコードに、その方法を示します。 - 関連項目:
-
- プロパティ アニメーションの概要
- API デモ: プロパティ アニメーション システムの使用方法の例
ビュー アニメーション
ビュー アニメーション フレームワークは、トゥイーン アニメーションとフレームごとのフレーム アニメーションの両方をサポートしており、どちらも 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>
要素です。 - 要素:
- 例:
-
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
に適用し、アニメーションを開始します。val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation
(this, R.anim.hyperspace_jump)
image.startAnimation
(hyperspaceJump)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 で定義されている場合、名前は小文字で始まります。- 例:
-
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> - 要素:
- 例:
-
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
の背景として設定し、アニメーションを再生します。val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource
(R.drawable.rocket_thrust)
val rocketAnimation = rocketImage.background
if (rocketAnimation isAnimatable
) {
rocketAnimation.start()
}ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource
(R.drawable.rocket_thrust);
rocketAnimation = rocketImage.getBackground()
;
if (rocketAnimation instanceofAnimatable
) {
((Animatable)rocketAnimation).start()
;
} - 関連項目: