深入理解Flutter动画原理,快来收藏!_flutter深入浅出动画
在Flutter中,动画是使用AnimationController和Animation类来实现的。AnimationController是用来控制动画的播放、暂停和反向播放,而Animation类用来定义如何根据AnimationController的当前值来计算动画的状态。
以下是一个简单的示例,演示如何使用AnimationController和CurvedAnimation创建一个简单的淡入动画:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with SingleTickerProviderStateMixin {
AnimationController controller;
Animation<double> animation;
@override
void initState() {
super.initState();
controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
);
animation = CurvedAnimation(
parent: controller,
curve: Curves.easeIn,
);
controller.forward();
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FadeTransition(
opacity: animation,
child: Container(
width: 100.0,
height: 100.0,
color: Colors.blue,
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
controller.reset();
controller.forward();
},
child: Icon(Icons.refresh),
),
);
}
}
在这个示例中,我们创建了一个AnimationController和CurvedAnimation对象。AnimationController负责管理动画时间的进度,CurvedAnimation添加了一个曲线,使动画在不同的时间点有不同的速度。然后我们使用FadeTransition来实现一个淡入效果,并且可以通过点击FloatingActionButton来重置和播放动画。
评论已关闭