ビュー アニメーション システムを使用すると、ビューでトゥイーン アニメーションを実行できます。トゥイーン アニメーションは、始点、終点、サイズ、回転、その他の一般的なアニメーションの要素などの情報を使用して、アニメーションを計算します。
トゥイーン アニメーションでは、View オブジェクトのコンテンツに対して一連の簡単な変換(位置、サイズ、回転、透明度)を実行できます。そのため、TextView
オブジェクトがある場合、テキストを移動、回転、拡大、または縮小できます。背景画像がある場合は、テキストとともに背景画像も変換されます。animation package
は、トゥイーン アニメーションで使用されるすべてのクラスを提供します。
アニメーション命令のシーケンスは、XML または Android コードで定義されたトゥイーン アニメーションを定義します。レイアウトを定義する場合と同様に XML ファイルを使用することをおすすめします。これは、アニメーションをハードコードするよりも、XML ファイルの方が読みやすく、再利用しやすく、入れ替えやすいためです。下記の例では、XML を使用します(XML ではなくアプリコードでアニメーションを定義する方法について詳しくは、AnimationSet
クラスと他の Animation
サブクラスをご覧ください)。
アニメーション命令では、実施する変換、そのタイミング、適用にかかる時間を定義します。変換は、順次または同時に行えます。たとえば、TextView のコンテンツを左から右に移動させてから 180 度回転させたり、テキストの移動と回転を同時に行ったりできます。各変換は、その変換に固有のパラメータ セット(サイズ変更の開始サイズと終了サイズ、回転の開始角度と終了角度など)と、一般的なパラメータのセット(たとえば、開始時間と継続時間)を取ります。複数の変換を同時に行うには、同じ開始時間を指定します。順次行うには、開始時間と直前の変換の継続時間を足す計算をします。
アニメーション XML ファイルは、Android プロジェクトの res/anim/
ディレクトリにあります。ファイルには 1 つのルート要素が必要です。ルート要素は、単一の <alpha>
、<scale>
、<translate>
、<rotate>
、interpolator 要素、またはこれらの要素のグループを保持する <set>
要素のいずれかです(<set>
も含めることができます)。デフォルトでは、すべてのアニメーション命令が同時に適用されます。それらを順次処理するには、次の例に示すように startOffset
属性を指定する必要があります。
ApiDemos の以下のいずれかの XML を使用して、ビュー オブジェクトの拡大と回転を同時に行います。
<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>
画面の座標(この例では使用されていません)は左上隅が(0,0)で、右下に進むにつれて増加します。
pivotX など一部の値は、オブジェクト自体または親に対して相対的に指定できます。適切な形式を使用してください(親に対して相対的に 50% の場合は「50」、自身に対して 50% の場合は「50%」)。
Interpolator
を割り当てることで、時間の経過に沿って変換を適用する方法を決定できます。Android には、さまざまな速度曲線を指定する Interpolator サブクラスがいくつか用意されています。たとえば、AccelerateInterpolator
は、開始して速度を上げるように変換に指示します。それぞれに、XML に適用できる属性値があります。
この XML をプロジェクトの res/anim/
ディレクトリに hyperspace_jump.xml
として保存すると、次のコードはこれ参照して、レイアウトから ImageView
オブジェクトに適用します。
Kotlin
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
Java
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
startAnimation()
の代わりに、
を使用してアニメーションの開始時間を定義してから、Animation.setStartTime()
を使用してアニメーションをビューに割り当てることもできます。View.setAnimation()
XML 構文、使用可能なタグと属性の詳細については、アニメーション リソースをご覧ください。
注: アニメーションの移動やサイズ変更の方法にかかわらず、アニメーションを保持する View の境界は、それに合わせて自動的に調整されることはありません。アニメーションは引き続きビューの境界を越えて描画され、クリップされません。ただし、アニメーションが親ビューの境界を越えるとクリッピングが発生します。