カテゴリ: FlutterのUI開発 更新日: 2026/08/07

Flutterアニメーション入門!初心者でもわかるFlutterのアニメーションの仕組みと基本的な作り方

1099
Flutterのアニメーションを導入しよう!基本の仕組みと簡単な例

先生と生徒の会話形式で理解しよう

生徒

「Flutterでアプリを作っているんですが、ボタンや画像を動かすアニメーションってどうやって作るんですか?」

先生

「Flutterではアニメーションの仕組みがしっかり用意されていて、Widgetを使って簡単に動きをつけることができます。」

生徒

「ゲームみたいに複雑なものじゃなくても、ボタンがふわっと表示されたり、画像が動いたりするアニメーションも作れるんですか?」

先生

「もちろんです。Flutterには初心者でも使いやすいアニメーションWidgetがあり、簡単なコードでUIアニメーションを実装できます。」

生徒

「Flutterのアニメーションの基本的な仕組みを知りたいです。」

先生

「それでは、Flutterのアニメーションの基本と実装方法を順番に見ていきましょう。」

1. Flutterのアニメーションとは

1. Flutterのアニメーションとは
1. Flutterのアニメーションとは

Flutterのアニメーションとは、Flutterアプリのユーザーインターフェースに動きをつけるための仕組みです。例えば、ボタンがゆっくり表示される、画像がスライドして登場する、サイズが変化するなどの動作を作ることができます。

FlutterのUIはすべてWidgetで構成されています。そのためFlutterのアニメーションもWidgetを使って実装します。これにより、Flutter初心者でも比較的簡単にUIアニメーションを作ることができます。

Flutterアニメーションは主に次のような場面で利用されます。

  • 画面遷移の演出
  • ボタンの動き
  • 画像のフェードイン表示
  • メニューのスライド表示
  • ロード中のアニメーション

Flutterでアニメーションを使うことで、アプリの操作性や見た目が大きく向上します。ユーザー体験を高めるためにも、Flutterアニメーションの基本は必ず理解しておきましょう。

2. Flutterアニメーションの基本構造

2. Flutterアニメーションの基本構造
2. Flutterアニメーションの基本構造

Flutterのアニメーションは主に次の三つの要素で構成されています。

  • AnimationController
  • Animation
  • AnimatedWidget

AnimationControllerはアニメーションの時間や開始停止を管理します。Animationは値の変化を管理する仕組みです。そしてAnimatedWidgetはその変化を画面に表示する役割を持っています。

Flutterのアニメーションは時間の経過に応じて値が変化し、その値に合わせてWidgetの状態を変更することで動きを表現します。

例えば、サイズが100から200まで変化するアニメーションを作ると、時間に合わせてサイズの値が変化し、Widgetが徐々に大きくなります。

最初は難しく見えるかもしれませんが、Flutterには初心者でも使いやすいAnimatedWidgetやAnimatedContainerなどが用意されています。

3. AnimatedContainerで簡単なアニメーションを作る

3. AnimatedContainerで簡単なアニメーションを作る
3. AnimatedContainerで簡単なアニメーションを作る

Flutter初心者が最初に覚えるべきアニメーションWidgetがAnimatedContainerです。これはサイズや色などの変化を自動的にアニメーション化してくれる便利なWidgetです。

次のサンプルコードでは、ボタンを押すとコンテナのサイズが変わるFlutterアニメーションを作っています。


import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AnimationExample(),
    );
  }
}

class AnimationExample extends StatefulWidget {
  @override
  _AnimationExampleState createState() => _AnimationExampleState();
}

class _AnimationExampleState extends State<AnimationExample> {

  double size = 100;

  void changeSize() {
    setState(() {
      size = size == 100 ? 200 : 100;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Flutter Animation")),
      body: Center(
        child: AnimatedContainer(
          duration: Duration(seconds: 1),
          width: size,
          height: size,
          color: Colors.blue,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: changeSize,
        child: Icon(Icons.play_arrow),
      ),
    );
  }
}

このようにAnimatedContainerを使うと、Flutterのアニメーションを非常に簡単に作ることができます。

Flutterを「実務レベル」で使えるようになりたい人や、 iPhone / Android両対応アプリ開発の流れをまとめて学びたい人には、 定番の実践書がこちらです。

Flutter実践開発をAmazonで見る

※ Amazon広告リンク

4. AnimatedOpacityでフェードインアニメーションを作る

4. AnimatedOpacityでフェードインアニメーションを作る
4. AnimatedOpacityでフェードインアニメーションを作る

FlutterではWidgetの透明度を変更することで、フェードインやフェードアウトのアニメーションを作ることもできます。これを実現するのがAnimatedOpacityです。

アプリ起動時に画像をゆっくり表示するようなUI演出でよく使われます。


import 'package:flutter/material.dart';

class FadeAnimation extends StatefulWidget {
  @override
  _FadeAnimationState createState() => _FadeAnimationState();
}

class _FadeAnimationState extends State<FadeAnimation> {

  double opacity = 0.0;

  void showImage() {
    setState(() {
      opacity = 1.0;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text("Fade Animation")),
      body: Center(
        child: AnimatedOpacity(
          opacity: opacity,
          duration: Duration(seconds: 2),
          child: FlutterLogo(size: 150),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: showImage,
        child: Icon(Icons.visibility),
      ),
    );
  }
}

AnimatedOpacityを使うことで、FlutterアプリのUIに自然な表示アニメーションを追加できます。

5. AnimatedPositionedで移動アニメーションを作る

5. AnimatedPositionedで移動アニメーションを作る
5. AnimatedPositionedで移動アニメーションを作る

FlutterではWidgetを画面上で移動させるアニメーションも簡単に作ることができます。そのために使うのがAnimatedPositionedです。

このWidgetはStackの中で使い、位置を変更すると自動的にアニメーションが実行されます。


import 'package:flutter/material.dart';

class MoveAnimation extends StatefulWidget {
  @override
  _MoveAnimationState createState() => _MoveAnimationState();
}

class _MoveAnimationState extends State<MoveAnimation> {

  double position = 50;

  void moveBox() {
    setState(() {
      position = position == 50 ? 200 : 50;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text("Move Animation")),
      body: Stack(
        children: [
          AnimatedPositioned(
            duration: Duration(seconds: 1),
            left: position,
            top: 100,
            child: Container(
              width: 100,
              height: 100,
              color: Colors.green,
            ),
          )
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: moveBox,
        child: Icon(Icons.play_arrow),
      ),
    );
  }
}

このようにFlutterのAnimatedWidgetを使うことで、複雑な計算をしなくても簡単に移動アニメーションを作ることができます。

6. AnimationControllerを使った本格的なFlutterアニメーション

6. AnimationControllerを使った本格的なFlutterアニメーション
6. AnimationControllerを使った本格的なFlutterアニメーション

Flutterのアニメーションをより細かく制御したい場合はAnimationControllerを使います。AnimationControllerを利用するとアニメーションの開始停止や速度などを細かく設定できます。

例えば、次のようにAnimationControllerを使うことでアニメーションの進行を管理できます。


class SimpleAnimation extends StatefulWidget {
  @override
  _SimpleAnimationState createState() => _SimpleAnimationState();
}

class _SimpleAnimationState extends State<SimpleAnimation>
    with SingleTickerProviderStateMixin {

  late AnimationController controller;

  @override
  void initState() {
    super.initState();

    controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 2),
    );

    controller.repeat();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Controller Animation")),
      body: Center(
        child: RotationTransition(
          turns: controller,
          child: FlutterLogo(size: 100),
        ),
      ),
    );
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }
}

AnimationControllerを使うと、回転アニメーションや複雑なUI演出なども実装できます。Flutterアニメーションを深く理解するためには、この仕組みを少しずつ学ぶことが大切です。

7. Flutterアニメーションを使うメリット

7. Flutterアニメーションを使うメリット
7. Flutterアニメーションを使うメリット

Flutterでアニメーションを導入することで、アプリの完成度が大きく向上します。静的な画面だけのアプリよりも、動きのあるUIはユーザーにとって操作しやすく、印象も良くなります。

Flutterのアニメーションには次のようなメリットがあります。

  • ユーザー体験の向上
  • アプリの見た目がプロフェッショナルになる
  • 操作がわかりやすくなる
  • 画面遷移が自然になる

またFlutterは高速描画エンジンを持っているため、スマートフォンでも滑らかなアニメーションを実現できます。これがFlutterが人気の理由の一つでもあります。

Flutterアニメーションは最初は難しく見えますが、AnimatedContainerなどの基本Widgetから学習すると理解しやすくなります。

まとめ

まとめ
まとめ

Flutterアニメーションはモバイルアプリ開発において非常に重要な技術です。アプリの画面に動きを加えることでユーザーにとって理解しやすい画面になり操作体験が向上します。Flutterではすべての画面要素がWidgetで構成されているためアニメーションもWidgetを中心に構築されます。この仕組みを理解することでFlutterのユーザーインターフェース設計をより深く理解できるようになります。

Flutterアニメーションの基本は値の変化を時間の流れとともに画面に反映させるという考え方です。サイズ色位置透明度などの値を少しずつ変化させることで自然な動きを表現します。Flutterではこの処理を簡単に実装できるように多くのアニメーションWidgetが用意されています。代表的なWidgetとしてAnimatedContainer AnimatedOpacity AnimatedPositionedなどがあります。これらを利用すると複雑な数式やフレーム処理を自分で実装しなくても自然なアニメーションを実装できます。

Flutter初心者が最初に覚えるべきポイントは状態変化とsetStateの関係です。Flutterでは状態が変化すると画面が再描画されます。この仕組みを利用してWidgetのサイズや透明度や位置を変更するとアニメーションWidgetが自動的にその変化を滑らかな動きとして表示してくれます。つまりFlutterアニメーションの多くは状態管理とWidgetの再描画によって実現されています。

例えばAnimatedContainerはサイズや色の変化を自動的にアニメーションとして表示してくれる便利なWidgetです。通常のContainerをAnimatedContainerに変更するだけで簡単にアニメーション機能を追加できます。これはFlutterの設計思想であるシンプルで再利用可能なWidget構造をよく表しています。Flutterアニメーション入門としてまずこのWidgetを理解することが大切です。

またFlutterではフェードインやフェードアウトのような視覚効果も簡単に作ることができます。AnimatedOpacityを使うことで透明度を変化させるアニメーションを作成できます。アプリ起動時のロゴ表示や画像表示などでよく利用される演出です。こうした演出を適切に使うことでアプリの完成度が高まりユーザーにとってわかりやすいインターフェースになります。

さらに画面上の移動アニメーションを実装したい場合にはAnimatedPositionedを利用します。これはStackの中でWidgetの位置を変更すると自動的に移動アニメーションを行うWidgetです。メニュー表示やカード移動などのインターフェースでよく利用されます。Flutterアニメーションの実装ではこのように用途に応じてWidgetを選択することが重要になります。

Flutterアニメーションをより高度に制御したい場合にはAnimationControllerを使用します。AnimationControllerはアニメーションの時間や開始停止繰り返しなどを管理する重要なクラスです。Flutterのアニメーション構造はAnimationController Animation AnimatedWidgetという構造で動作します。この仕組みを理解すると複雑な回転アニメーションや連続アニメーションなども実装できるようになります。

Flutterアニメーションを学習する際には最初から複雑な制御を学ぶよりもAnimatedContainerやAnimatedOpacityなどの基本Widgetから理解することが大切です。これらのWidgetを使いながらアニメーションの動作原理を理解していくとFlutterのアニメーション設計が自然に理解できるようになります。

またFlutterアニメーションはユーザー体験を大きく向上させる要素です。静止した画面だけのアプリと比べてアニメーションがあるアプリは操作が直感的になり画面遷移も理解しやすくなります。特にモバイルアプリでは視覚的なフィードバックが重要でありボタンの動きや画面表示の変化がユーザーに安心感を与えます。

Flutterは高速な描画エンジンを持っているためスマートフォンでも滑らかなアニメーションを実現できます。この特徴によりFlutterはモバイルアプリ開発フレームワークとして高い人気を持っています。Flutterアニメーションを活用することで見た目の美しいモダンなアプリケーションを作ることが可能になります。

次のサンプルコードはFlutterアニメーションの復習としてサイズと透明度を同時に変化させる簡単な例です。Flutterアニメーションの基本的な考え方をもう一度確認してみましょう。


import 'package:flutter/material.dart';

class SimpleSummaryAnimation extends StatefulWidget {
  @override
  _SimpleSummaryAnimationState createState() => _SimpleSummaryAnimationState();
}

class _SimpleSummaryAnimationState extends State<SimpleSummaryAnimation> {

  double size = 100;
  double opacity = 1.0;

  void changeAnimation() {
    setState(() {
      size = size == 100 ? 200 : 100;
      opacity = opacity == 1.0 ? 0.3 : 1.0;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text("Flutter Animation Summary")),
      body: Center(
        child: AnimatedOpacity(
          duration: Duration(seconds: 1),
          opacity: opacity,
          child: AnimatedContainer(
            duration: Duration(seconds: 1),
            width: size,
            height: size,
            color: Colors.blue,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: changeAnimation,
        child: Icon(Icons.play_arrow),
      ),
    );
  }
}

このようにFlutterアニメーションは複数のWidgetを組み合わせることでさまざまな表現が可能になります。Flutter初心者はまず基本Widgetの使い方を理解しその後AnimationControllerなどの高度な制御へ進むと理解が深まります。Flutterアニメーションの仕組みを理解すると画面演出の自由度が大きく広がり魅力的なモバイルアプリ開発が可能になります。

先生と生徒の振り返り会話

生徒

Flutterアニメーションについて学んでみて画面に動きをつける仕組みが少し理解できました。FlutterではWidgetの状態が変わると画面が再描画されるのでその変化を利用してアニメーションを作るのですね。

先生

その通りです。Flutterアニメーションの基本は状態変化とWidget再描画です。サイズや位置や透明度などの値を変えることで画面に自然な動きを表現できます。

生徒

AnimatedContainerやAnimatedOpacityのようなWidgetを使うと初心者でも簡単にアニメーションを作れることがわかりました。Flutterアプリ開発ではよく使われる機能なのですね。

先生

はい。Flutterアニメーションの基本Widgetは多くのアプリで使われています。まずは簡単なアニメーションから作ってみてFlutterの仕組みに慣れることが大切です。

生徒

そしてもっと複雑な動きを作りたいときにはAnimationControllerを使うのですね。Flutterアニメーションの構造が少し理解できました。

先生

その理解で正しいです。Flutterアニメーションは基本Widgetから始めてAnimationControllerへ進むと理解しやすくなります。Flutterアプリ開発ではユーザー体験を高めるためにアニメーションはとても重要な技術です。

生徒

これからFlutterアニメーションをいろいろ試してみて自分のアプリにも動きのある画面を作ってみたいと思います。

先生

ぜひ挑戦してください。Flutterアニメーションを理解するとモバイルアプリの表現力が大きく広がります。少しずつ実装を試しながらFlutterアニメーションの理解を深めていきましょう。

FlutterのUI開発の一覧へ
新着記事
Flutter
FlutterでWebアプリをビルドする方法と注意点
FlutterでWebアプリをビルドする方法と注意点を徹底解説【初心者向け】
Flutter
Flutter Web開発の始め方!環境構築と基本の流れ
Flutter Web開発の始め方を完全ガイド!初心者でもわかる環境構築と基本の流れ
Flutter
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Flutter
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
人気記事
Flutter
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク