Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Stream
- Flutter
- BAEKJOON
- Algorithm
- BOF
- 백준
- FastAPI
- 영상처리
- BFS
- Computer Architecture
- Kaggle
- PCA
- Dreamhack
- ML
- MATLAB
- bloc
- Got
- study book
- llm을 활용 단어장 앱 개발일지
- MDP
- Image Processing
- ARM
- fastapi를 사용한 파이썬 웹 개발
- system hacking
- Widget
- DART
- C++
- rao
- pytorch
Archives
- Today
- Total
Bull
[Flutter::Animation] Tween 예제를 쓰면서 이해해보자 본문
Tween 클래스는 시작값과 끝값 사이의 선형 보간을 수행합니다. Tween 객체를 애니메이션과 함께 사용하려면 Tween 객체의 animate 메서드를 호출하고, 수정할 애니메이션 객체를 전달합니다. Tween 객체는 chain 메서드를 사용해 체이닝할 수 있으며, 이는 애니메이션 객체를 여러 Tween 객체로 구성하는 것과 다릅니다. 체이닝을 사용하면 단일 애니메이션 객체가 여러 Tween 객체에 의해 구성될 수 있습니다.
Tween은 "in-between"의 줄임말로, 애니메이션의 중간 상태를 계산하는 데 사용됩니다. 기본적으로 Tween 애니메이션은 AnimationController
와 함께 사용됩니다.
Tween 애니메이션의 기본 구조
- AnimationController:
- 애니메이션의 실행 시간과 상태를 제어하는 역할을 합니다.
vsync
속성을 필요로 하며, 애니메이션의 프레임 속도를 동기화하는 데 사용됩니다.
- Tween:
- 애니메이션의 시작과 끝 값을 정의합니다.
Tween<double>
뿐만 아니라ColorTween
,SizeTween
등 다양한 Tween이 존재합니다.
- Animation:
- Tween과 AnimationController를 결합하여 애니메이션의 중간 값을 생성합니다.
- 쉽게 설명하면 기본적으로 애니메이션을 저장해주는 객체입니다. 이 객체에 Tween이라는 애니메이션 요소를 저장하는 것입니다.
예제 코드
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Repeating Tween Animation Example'),
),
body: Center(
child: RepeatingTweenAnimationDemo(),
),
),
);
}
}
class RepeatingTweenAnimationDemo extends StatefulWidget {
@override
_RepeatingTweenAnimationDemoState createState() => _RepeatingTweenAnimationDemoState();
}
class _RepeatingTweenAnimationDemoState extends State<RepeatingTweenAnimationDemo> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
)..repeat(reverse: true); // 반복 재생, reverse는 끝에서 시작 값으로 돌아가는 것을 의미
_animation = Tween<double>(begin: 50.0, end: 200.0).animate(_controller)
..addListener(() {
setState(() {});
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
width: _animation.value,
height: _animation.value,
color: Colors.blue,
);
}
}
설명
- AnimationController 초기화:
SingleTickerProviderStateMixin
을 사용하여vsync
를 설정하고, 애니메이션의 지속 시간을 2초로 설정합니다. - Tween 생성 및 Animation 연결:
Tween<double>(begin: 50.0, end: 200.0)
을 사용하여 시작과 끝 값을 지정합니다. 이 Tween을animate
메서드와 함께 사용하여 애니메이션을 생성합니다. - addListener: 애니메이션의 값이 변경될 때마다
setState
를 호출하여 위젯을 다시 빌드합니다. - 애니메이션 시작:
forward
메서드를 호출하여 애니메이션을 시작합니다. - 빌드 메서드: 애니메이션 값(_animation.value)에 따라 크기가 변하는 컨테이너를 렌더링합니다.
추가 정보
- Tween의 제네릭
위의 코드처럼 제네릭은 begin, end의 프로퍼티의 형식으로 들어가게 됩니다._animation = Tween<Offset>( begin: const Offset(100.0, 50.0), end: const Offset(200.0, 300.0), ).animate(_controller);
- SingleTickerProviderStateMixin
SingleTickerProviderStateMixin은 플러터 애니메이션에서 중요한 역할을 하는 믹스인입니다. 이 믹스인은 단일 Ticker를 제공하며, 이를 통해 애니메이션 프레임마다 콜백을 호출할 수 있습니다. Ticker는 활성화된 동안 애니메이션 프레임마다 콜백을 호출하는 객체입니다.
SingleTickerProviderStateMixin 공식 문서 나중에 기회가 된다면 초보자가 알아 듣기 더 쉽게 설명하는 게 좋겠네요. 저도 애니메이션을 더 부르덥게 만들어주고 애니메이션 위젯 사용 시 필요한 믹스인이라는 거 외에 아직 잘 이해되지 않았어요.
결과
'Software Framework > Flutter' 카테고리의 다른 글
[Flutter::Animation] implicits animations (ImplicitlyAnimatedWidget) (2) | 2024.07.24 |
---|---|
[Flutter::Animation] Ticker 이해 (0) | 2024.07.23 |
[Flutter::Widget] Flutter에서 git Contributions Graph(잔디밭)을 만들어 보자. (0) | 2024.07.17 |
[Flutter::Widget] Card를 이용하여 트위터, 링크드인, 레딧같은 Feed 포스트 만들어보기 (0) | 2024.07.17 |
[Flutter] Bloc Widget정리 (0) | 2024.07.15 |