본문 바로가기
앱개발/Flutter

Flutter에서 AnimationController와 Tween으로 애니메이션 구현하기: 단계별 가이드

by 김무스비 2024. 10. 21.
728x90
반응형

서론: Flutter에서 애니메이션 구현하기

애니메이션은 앱에 생동감을 더해 사용자 경험(UX)을 개선하는 중요한 요소입니다. Flutter에서는 다양한 방법으로 애니메이션을 구현할 수 있지만, 그중에서도 AnimationController와 Tween을 활용한 애니메이션은 매우 유용하고 효과적입니다. 이 글에서는 AnimationController와 Tween을 사용하여 애니메이션을 어떻게 다루는지 설명하고, 실제 Flutter 앱에서 적용할 수 있는 예제를 통해 실전에서 애니메이션을 구현하는 방법을 보여드리겠습니다.

controller image


AnimationController란?

AnimationController는 애니메이션의 시간을 제어하는 역할을 하는 Flutter의 클래스입니다. AnimationController는 일정한 시간 동안 애니메이션을 실행하거나, 사용자의 동작에 따라 애니메이션을 멈추거나 다시 시작할 수 있는 도구입니다. 일반적으로 애니메이션의 상태를 변경하고, 이를 화면에 반영하는 데 사용됩니다.

AnimationController 기본 사용법

AnimationController는 아래와 같은 기본 속성을 사용하여 애니메이션을 제어합니다:

  • vsync: 애니메이션의 성능을 개선하는 옵션으로, TickerProvider를 사용하여 프레임 손실을 방지합니다.
  • duration: 애니메이션의 지속 시간을 설정합니다.
  • forward(), reverse(), repeat(): 애니메이션을 앞으로 재생하거나, 반대로 재생하거나, 반복 재생할 수 있습니다.
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(seconds: 2),
    )..forward();
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FadeTransition(
          opacity: _controller,
          child: const Text('Flutter 애니메이션!'),
        ),
      ),
    );
  }
}

코드 설명은 다음과 같습니다.

  • vsync는 화면 재생 주기를 최적화하는 데 사용됩니다.
  • duration은 2초 동안 애니메이션이 진행되도록 설정합니다.
  • forward()는 애니메이션을 진행시키는 함수입니다.
  • FadeTransition 위젯은 텍스트의 투명도를 변경하여 페이드 애니메이션을 적용합니다.

Tween이란?

Tween은 시작 값과 끝 값을 정의하고, 두 값 사이의 중간 값을 계산해주는 역할을 합니다. Tween을 사용하면 다양한 속성(크기, 색상, 위치 등)에 대해 애니메이션을 적용할 수 있습니다. Tween은 AnimationController와 함께 사용되며, 애니메이션이 진행되는 동안 중간 값을 자동으로 계산해줍니다.

Tween 기본 사용법

Tween은 다음과 같이 정의할 수 있습니다.

Tween<double>(begin: 0, end: 300).animate(_controller);

이 코드는 0에서 300까지의 값을 계산해주는 Tween을 생성합니다. 이 값을 이용해 예를 들어 크기나 위치 변화를 애니메이션할 수 있습니다.

AnimationController와 Tween을 활용한 예제

이제 AnimationControllerTween을 결합하여 실전 애니메이션을 구현해보겠습니다. 아래 코드는 텍스트가 점점 커지면서 확대되는 애니메이션을 구현하는 예제입니다.

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> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(seconds: 3),
    );

    _animation = Tween<double>(begin: 0, end: 300).animate(_controller)
      ..addListener(() {
        setState(() {});
      });

    _controller.forward();
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AnimationController & Tween 예제'),
      ),
      body: Center(
        child: Container(
          width: _animation.value,
          height: _animation.value,
          color: Colors.blue,
          child: const Center(child: Text('확대 애니메이션')),
        ),
      ),
    );
  }
}

코드에 대한 설명은 다음과 같습니다.

  • AnimationController는 3초 동안 애니메이션을 제어합니다.
  • Tween은 크기(0에서 300) 사이의 변화를 계산합니다.
  • **addListener()**를 통해 애니메이션이 진행될 때마다 화면을 다시 그려줍니다.

실전 활용: 다양한 애니메이션 조합

AnimationController와 Tween은 다양한 방식으로 활용할 수 있습니다. 다음은 Flutter 애니메이션을 실전에서 활용할 수 있는 몇 가지 사례입니다:

  1. 화면 전환 애니메이션: 화면 전환 시 애니메이션을 적용하여 자연스러운 이동 효과를 줄 수 있습니다.
  2. 버튼 애니메이션: 사용자가 버튼을 누를 때 크기나 색상이 변하는 애니메이션을 통해 시각적 피드백을 줄 수 있습니다.
  3. 로딩 애니메이션: 비동기 작업 중 로딩 상태를 나타내는 애니메이션을 추가하여 사용자가 작업 진행 상황을 알 수 있도록 할 수 있습니다.
  4. 복합 애니메이션: 여러 속성을 동시에 애니메이션하여 더욱 풍부한 사용자 경험을 제공할 수 있습니다. 예를 들어 크기와 색상, 위치가 동시에 변하는 애니메이션을 적용할 수 있습니다.

결론

AnimationController와 Tween은 Flutter에서 애니메이션을 구현할 때 매우 강력한 도구입니다. 이들을 결합하여 다양한 애니메이션을 만들 수 있으며, 사용자 인터페이스를 더욱 생동감 있게 만들어 줍니다. Flutter에서 애니메이션을 효과적으로 사용하는 것은 앱의 시각적 완성도를 높이는 중요한 기술이므로, 다양한 애니메이션 패턴을 연습하여 자연스러운 상호작용을 구현해보세요.

728x90
반응형