FireMonkey のアニメーション効果

提供: Appmethod Topics
移動先: 案内検索

FireMonkey アプリケーション ガイド への移動


アニメーションは時間の経過とともにプロパティ値を変更します。 アニメーションは自動または手動で開始できます。また、どちらの場合も、アニメーションの開始を遅らせるオプションを付けることができます。 アニメーションは、定められた時間でその過程を実行すると、停止、繰り返し実行、または逆回しに同じものを実行することができます。

アニメーションの種類

提供されている TAnimation のサブクラスは、次の 3 つのカテゴリに分類されます:

  • 開始値から終了値までの補間:
    • TFloatAnimation は、位置(X 軸、Y 軸、Z 軸は独立でなければなりません)、回転、不透明度などの任意の数値プロパティを変更します。
    • TRectAnimation は、TBounds プロパティの 4つの端の位置を変更します。.
    • TColorAnimation は、色の赤、緑、青、およびアルファ値を変更することによって、TAlphaColor 型(実際には Cardinal 型の数値)を含む色を表す文字列または整数値のプロパティを変更します。
    • TGradientAnimation は、グラデーションを定義する各点の色を変更することによって、グラデーション(TGradient 型)を変更します。
    • TBitmapAnimation は、不透明度を増加させて徐々にビューに表示されるように最終画像(TBitmap 型)を描画することによって、開始時のビットマップ画像を別の画像に遷移させます。
  • 2 つの値ではなく、一連の値に沿った補間: (第 1 の値から第 2 の値まで、第 2 の値から第 3 の値までなど):
  • 補間せずにリストに沿って遷移:
    • TBitmapListAnimation は、すべての画像が水平方向に結合されて 1 つのビットマップになって、一定間隔のスライドショーのように動作します。速いフレーム レート(短い間隔と多くの画像)にすると、それは映画のように見えます。

アニメーションの作成

アニメーションは、他のサブコンポーネントと同様に、アニメーション化されているオブジェクトの子として付加されます。 そして、GetPropInfo のような System.TypInfo 関数で使われるときに、PropertyName プロパティが点線状のプロパティ パスに設定されます(たとえば、"Opacity"、"Position.Y")。

[オブジェクト インスペクタ]では、よくアニメーション化されるプロパティは、フィルム ストリップのアイコンで表示されます。 プロパティ値のドロップダウン メニューからアニメーションを作成する選択をすると、自動的に PropertyName が設定されます。 コンポーネント パレットから追加されたアニメーション オブジェクトでは、手動で PropertyName を設定しなければなりません。

TFmxObject には、コードから数値アニメーションやアニメーションを作成する便利やメソッドがあります。これらのメソッドは、必須の引数として PropertyName と終了値を取ります。これらのアニメーションは、常に現在の値から直ちに始まり、ループせずに、終了したら自身を解放します。 また、数値アニメーションは、遅らせて開始したり、終了するまでメイン スレッドで待機させることもできます。

開始と停止

フォーム デザイナでアニメーションの Enabled フラグが True に設定されていると、アニメーションは読み込み後に自動的に開始します。コード内でこのフラグを True に設定した場合も、アニメーションが開始します。このフラグを False に設定すると、アニメーションは停止します。 逆に、Start や Stop を呼び出すと、それに一致するようにEnabled が設定されます。

TFloatAnimation では、アニメーションが開始されると(Start が呼び出されるか、Enabled が True に設定される)、StartFromCurrent が自動的に StartValue を現在のプロパティ値で上書きます。 StartFromCurrent が True の場合は、StartValue を設定しても意味がありません。

メモ: これは、特に手動でループを行ったり、アニメーション オブジェクトを再利用する場合に関係します。 前回の実行で StartFromCurrent を使用して、次の実行で StartValue を使用する場合は、StartFromCurrent を False に設定しなければなりません。

アニメーションを停止するには、以下の方法があります。

  • Pause を True に設定すると、Pause を False に戻したときに、その時点からアニメーションを再開できます。
  • Stop を呼び出すと、アニメーションの最後にスキップできます。 プロパティは終了値(Inverse が False の場合は StopValue、Inverse が True の場合は StartValue)に設定されます。また、OnFinish イベントが発生します。
  • StopAtCurrent は、プロパティを終了値に設定しませんが、OnFinish イベントを発生させます。

アニメーションのトリガ

Enabled を利用して自動的にアニメーションを開始したり、手動で Start や Stop を呼び出す方法のほかに、プロパティの変更に基づいてアニメーションをトリガすることもできます。 トリガは、どのプロパティでも動作するわけではなく、コンポーネントの内部イベントの処理中にチェックされる特定のプロパティによってのみ動作します。 すべての組み込みトリガは、ブール型のプロパティをチェックします。慣習として、これらのプロパティの名前は "Is" で始まります。 TControl と TControl3D は、すべてのコントロールと形状に次の 4 つのトリガを提供しています。

その他の組み込みトリガには、以下のものがあります。

  • IsPressed(TCustomButton、TRadioButton、TCheckBox)
  • IsChecked(TRadioButton、TCheckBox、TMenuItem)
  • IsSelected(MenuItem、TTabItem、TListBoxItem、TTreeViewItem)
  • IsExpanded(TTreeViewItem、TExpander)
  • IsActive(TCustomForm)

メモ: アニメーション以外のその他の画像効果には、少し異なるトリガ セットが提供されています。

コードやユーザー アクションの結果として、これらのプロパティが変化すると、アニメーションが Start に設定されます。 トリガ条件が満たされなくなると、アニメーションは停止します。 トリガ条件は等しいかどうかのチェックに限られています。トリガに複数の条件が含まれている場合、トリガが発生するには、それらすべての条件が真と評価されなければなりません。 トリガは、セミコロンで区切られた 1 つ以上のトリガ条件を含む文字列として表現されます。 それぞれのトリガ条件は、プロパティ名、等号記号、トリガ値で構成されます。 すべての組み込みトリガはブール値です。したがって、それらの値は "true" または "false" でなければなりません。 以下に例を示します。

IsMouseOver=true;IsPressed=false

トリガ条件は、TriggerTriggerInverse の 2 つのプロパティに保存されます。 その名のとおり、前者は単純に定義どおりにアニメーションを開始します。一方、後者は、最初にアニメーションの Inverse フラグを設定します。 アニメーションを逆回しに実行する方法と、条件が満たされなくなった時点でアニメーションを直ちに停止する方法のために、正反対のトリガ条件を持つ 1 つのアニメーションではなく、正反対のトリガを持つ、正反対に定義された 2 つの異なるアニメーションが必要になる場合があります。

逆回しとループ

逆回しは、"時間を逆向きに実行" することによって動作します。開始値と終了値を逆にするわけではありません。 したがって、Inverse と StartFromCurrent の両方が True の場合は、プロパティは最初に StopValue にジャンプし、次にアニメーションが開始した時点の値に戻るようにアニメーション化されます。つまり、"現在の値で停止" と同じ意味になります(StopAtCurrent 手続きではなく、ブール値の StartAtCurrent と同様)。

アニメーションは繰り返しループできます。同じ向きで繰り返すこともできますし、AutoReverse を利用して振り子のように行ったり来たりすることもできます。

カスタム アニメーション

カスタム アニメーション コンポーネントは、TAnimation のサブクラスを作成して、ProcessAnimation を実装することによって作成できます。

関連項目