ビュー アニメーション

ビュー アニメーション システムを使用すると、ビューでトゥイーン アニメーションを実行できます。トゥイーン アニメーションは、開始点、終了点、サイズ、回転などの情報を使用してアニメーションを計算します。

トゥイーン アニメーションは、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 の境界を超えて描画され、クリップされることはありません。ただし、アニメーションが親ビューの境界を越えるとクリッピングが発生します