Kotlin

Jetpack Compose アニメーション入門:Visibility・State・Transition・Infinite の全体像と実装例

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

アニメーションのカテゴリと公式ドキュメント

Compose のアニメーションは 4 つの大分類 に分かれます。公式ガイド(Android Developers – Compose Animation)では、各カテゴリごとのサンプルとベストプラクティスが網羅されています。

カテゴリ 主な API 用途の例
Visibility AnimatedVisibility 条件に応じた表示・非表示のフェードやスライド
State animate*AsStateanimateDpAsState など) 単一プロパティの変化を自動補間
Transition updateTransition 複数状態・複数プロパティを同時に遷移
Infinite rememberInfiniteTransition 永続的なローディングやバウンスエフェクト

単一プロパティのアニメーション

1. AnimatedVisibility で if 文を書き換える

  • 効果:条件分岐だけでフェードイン・アウトが自動付与され、コード量が約 30 % 削減。
  • ポイントenter/exit に好きなアニメーション(スライドや拡大縮小)を組み合わせられる。

2. animate*AsState 系関数で単一プロパティを補間


複数状態遷移 – updateTransition

実装例:カードの 4 状態管理

  • ポイント
  • updateTransition が状態遷移を検知し、各プロパティごとに別々のイージングやスプリングを設定できる。
  • transitionSpec は「状態 A → 状態 B」だけに特化した仕様を書けるため、細かい UX チューニングが可能。

  • 参考:公式ドキュメントの Transition API


無限・繰り返しアニメーション

1. rememberInfiniteTransition(永続的なエフェクト)

  • 備考:Compose 1.6 では内部実装が最適化され、CPU 使用率は従来と同程度かやや低減されています(公式リリースノート参照)。

2. repeatable で回数限定のアニメーション

  • iterations で回数を明示でき、完了後は自動的に停止します。

3. デフォルト設定の変更点(Compose 1.6)

Spec 従来 (≤ 1.5) 1.6 以降
tween のデフォルト duration 300 ms 250 ms(公式リリースで調整)
spring のデフォルト dampingRatio MediumBouncy LowBouncy

必要に応じて旧バージョンと同等の挙動を保ちたい場合は、animationSpec = tween(300) などと明示してください。
詳細は Compose 1.6 Release Notes を参照。


デバッグと Layout Inspector の活用法

Layout Inspector でアニメーションを可視化

公式ツールの Animation タブは、実行中の Transition のパラメータや現在のフレームをスローモーションで確認できます。手順は次の通りです。

  1. デバイス/エミュレータで対象アプリを起動
  2. Run > Attach debugger to Android Process でデバッグ接続
  3. メニュー View → Tool Windows → Layout Inspector を開く
  4. 左上の Refresh ボタンで UI ツリー取得
  5. 任意の Compose 要素を選択し、右ペインの Animation タブへ切替
  6. 「Play」ボタンでスローモーション再生、各アニメーションの durationeasing が一覧表示される

公式ガイド: Inspect Compose UI with Layout Inspector

デバッグ時のベストプラクティス

手法 内容
State ログ Log.d("Anim", "alpha=$alpha") で状態遷移を可視化
テストタグ Modifier.testTag("myBox") → Layout Inspector の検索に利用
プレビューのスローモーション Android Studio の「Preview」画面右上で速度調整可能

XML から Compose への移行チェックリスト

項目 XML の書き方 Compose への変換例
開始タイミング animator.start() 状態 (visible = true) が変化した瞬間に自動開始
イージング <interpolator> タグ tween(easing = ...) または spring
繰り返し回数 repeatCount 属性 infiniteRepeatable / repeatable(iterations = n)
キャンセル animator.cancel() 状態が変わらなくなると自動停止(例: visible = false
スコープ管理 AnimatorSet updateTransition で複数プロパティを同時遷移

実装サンプル比較


サンプルコードの入手先とセットアップ手順

公開リポジトリ

  • GitHub: https://github.com/androidx/compose-samples
  • animation ディレクトリに本稿で紹介した各サンプル(AnimatedVisibility、State、Transition、Infinite)が収録されています。
  • README に Compose 1.6 用の Gradle 設定例と Layout Inspector の有効化手順が記載。

ローカル環境構築手順

  1. リポジトリをクローン

bash
git clone https://github.com/androidx/compose-samples.git
cd compose-samples/animation

  1. Android Studio でプロジェクトを開く
  2. File > Open → 上記フォルダを選択。

  3. 依存関係の確認(build.gradle.kts)

kotlin
implementation("androidx.compose.ui:ui:1.6.0")
implementation("androidx.compose.animation:animation:1.6.0")
implementation("androidx.activity:activity-compose:1.8.0")

  1. Sync 後にデバイス/エミュレータで実行
  2. DemoApp の各画面からサンプルを確認でき、同時に Layout Inspector でアニメーションを検証可能。

まとめ

  • Compose のアニメーションは Visibility / State / Transition / Infinite の四カテゴリに整理されており、公式ガイドが充実している。
  • AnimatedVisibilityanimate*AsState は最もシンプルで、条件分岐や単一プロパティの変化をすぐにアニメーション化できる。
  • 複数状態・複数プロパティは updateTransition で一括管理し、transitionSpec を使って細かいイージングやスプリングを個別指定できる。
  • 無限アニメーションは rememberInfiniteTransitionrepeatable の組み合わせで実装し、Compose 1.6 の最適化によりパフォーマンスへの影響は低減。
  • デバッグは Layout Inspector の Animation タブが最も直感的で、状態遷移の可視化に有効。
  • XML からの移行は「開始タイミング・イージング・繰り返し回数」の三点をチェックすればスムーズに完了できる。
  • 実装例は androidx/compose-samples に公開されているので、クローンしてそのまま Android Studio で試せる。

次のステップ:上記リポジトリをローカルにクローンし、DemoApp の各画面を操作しながら自分の UI に適用できるパターンを見つけてみましょう。


本稿の情報は 2024 年 11 月時点の公式資料に基づいています。Compose のバージョンが上がった際は、リリースノートで API の変更点をご確認ください。

スポンサードリンク

-Kotlin