下の図は、アニメーションの実装に使用する API を決定する際に役立ちます。
以下のディシジョン ツリーの質問を参考に、ユースケースに最適なアニメーション API を選択してください。
- アニメーションはアートのようなもので、多くの視覚要素(SVG や画像)で構成されていますか?
- はい: シンプルな SVG(マイクロ アニメーションを使用したアイコン)はありますか?
- ○:
AnimatedVectorDrawable
- 不可: サードパーティのアニメーション フレームワーク(
Lottie
など)
- ○:
- いいえ: 何度も繰り返す必要がありますか?
- ○:
rememberInfiniteTransition
- いいえ: これはレイアウト アニメーションですか?
- はい: コンテンツの異なる複数のコンポーザブルを切り替えますか?
- ○: Navigation-compose を使う
- ○:
enterTransition
とexitTransition
が設定されたcomposable()
- ×:
AnimatedContent
、Crossfade
、Pager
- ○:
- いいえ: 外観や消失をアニメーション化していますか?
- ○:
AnimatedVisibility
またはanimateFloatAsState
(Modifier.alpha()
の場合) - いいえ: サイズをアニメーション化しますか?
- ○:
Modifier.animateContentSize
- いいえ: その他のレイアウト プロパティ(オフセット、パディングなど)。
- はい: 「これらのプロパティは互いに完全に独立していますか?」をご覧ください。
- いいえ: リストアイテムのアニメーションですか?
- ○:
animateItemPlacement()
(並べ替えと削除は近日提供予定)
- ○:
- ○:
- ○:
- ○: Navigation-compose を使う
- いいえ: 複数のプロパティをアニメーション化する必要がありますか?
- はい: これらのプロパティは互いに完全に独立していますか?
- ○:
animate*AsState
、テキストの場合はTextMotion.Animated
を使用します。 - いいえ: 同時に開始しますか?
- ○: ○:
updateTransition
(AnimatedVisibility
、animateFloat
、animateInt
など) - いいえ:
animateTo
を含むAnimatable
を異なるタイミングで呼び出す(suspend 関数を使用)
- ○: ○:
- ○:
- いいえ: アニメーションに定義済みのターゲット値のセットはあるか。
- ○:
animate*AsState
、テキストの場合はTextMotion.Animated
を使用 - いいえ: ジェスチャー駆動型のアニメーションを使用しますか?アニメーションが唯一の信頼できる情報源ですか?
- ○:
Animatable
(animateTo
/snapTo
) - いいえ: 状態管理のないワンショット アニメーション?
- ○:
AnimationState
またはanimate
- いいえ: 回答がここにない場合機能リクエストの提出
- ○:
- ○:
- ○:
- はい: これらのプロパティは互いに完全に独立していますか?
- はい: コンテンツの異なる複数のコンポーザブルを切り替えますか?
- ○:
- はい: シンプルな SVG(マイクロ アニメーションを使用したアイコン)はありますか?
図の PDF 版をダウンロードします。