ビュー アニメーション システムを使用すると、ビューでトゥイーン アニメーションを実行できます。トゥイーン アニメーションは、開始点、終了点、サイズ、回転などの情報を使用してアニメーションを計算します。
トゥイーン アニメーションは、View オブジェクトのコンテンツに対して一連の単純な変換(位置、サイズ、回転、透明度)を実行できます。そのため、TextView
オブジェクトがある場合、テキストを移動、回転、拡大、または縮小できます。背景画像がある場合、背景画像はテキストと一緒に変換されます。animation package
は、トゥイーン アニメーションで使用されるすべてのクラスを提供します。
一連のアニメーション命令は、XML または Android コードで定義されたトゥイーン アニメーションを定義します。レイアウトの定義と同様に、アニメーションをハードコードするよりも XML ファイルのほうが読みやすく、再利用や切り替えがしやすいため、XML ファイルをおすすめします。下記の例では、XML を使用します(XML ではなくアプリコードでアニメーションを定義する方法について詳しくは、AnimationSet
クラスとその他の Animation
サブクラスをご覧ください)。
アニメーションの手順では、実行する変換、実行するタイミング、適用にかかる時間を定義します。変換は順次にすることも、同時に行うこともできます。たとえば、TextView のコンテンツを左から右に移動してから 180 度回転させたり、テキストの移動と回転を同時に実行したりできます。各変換は、その変換に固有の一連のパラメータ(サイズ変更の開始サイズと終了サイズ、回転の開始角度と終了角度など)と、一般的なパラメータのセット(開始時間と期間など)を受け取ります。複数の変換を同時に行うには、開始時間を同じにします。順番に行うには、開始時間と前の変換の継続時間を計算します。
アニメーション XML ファイルは、Android プロジェクトの res/anim/
ディレクトリにあります。ファイルには単一のルート要素が必要です。ルート要素は、単一の <alpha>
、<scale>
、<translate>
、<rotate>
、interpolator 要素、またはこれらの要素のグループを保持する <set>
要素です(別の <set>
を含めることができます)。デフォルトでは、すべてのアニメーション命令が同時に適用されます。これらを順番に行うには、以下の例に示すように startOffset
属性を指定する必要があります。
以下の ApiDemos の 1 つの XML は、View オブジェクトを伸ばし、同時にスピンと回転を行うために使用されます。
<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 の境界は、それに合わせて自動的に調整されることはありません。ただし、アニメーションは View の境界を超えて描画され、クリップされることはありません。ただし、アニメーションが親ビューの境界を越えるとクリッピングが発生します。