在Flutter
的动画开发当中,Flutter SDK
也有提供一些内置的动画组件给我们使用。这篇博客就来分享一下有哪些内置的动画组件
,希望对小伙伴们有所帮助。
内置的动画组件
动画组件名称 | 组件的作用 |
---|---|
AlignTransition | 与Align组件对应的动画组件,可以控制子组件对齐方式的切换。 |
SlideTransition | 可以控制组件偏移位置的动画组件。 |
ScaleTransition | 可以控制组件比例的动画组件。 |
RotationTransition | 可以控制旋转角度的动画组件。 |
SizeTransition | 可以控制大小的动画组件。 |
FadeTransition | 可以控制透明度的动画组件。 |
RelativePositionedTransition | 与Positioned组件对应的动画组件,可以用于组件位置的切换。 |
简单的使用案例
以AlignTransition
为例子,因为我不会搞gif图片,我直接上全部代码,可以复制到编译器上面使用:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Transition Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage>
with SingleTickerProviderStateMixin {
late Animation<Alignment> alignmentAnimation;
late AnimationController _controller;
@override
void initState() {
super.initState();
// 初始化动画控制器
_controller =
AnimationController(vsync: this, duration: const Duration(seconds: 1));
// 创建插值为Alignment类型的动画对象
AlignmentTween alignmentTween =
AlignmentTween(begin: Alignment.topLeft, end: Alignment.bottomRight);
alignmentAnimation = alignmentTween.animate(_controller);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(
height: 200,
color: Colors.redAccent,
child: AlignTransition(
alignment: alignmentAnimation,
child: Container(
width: 200,
height: 100,
color: Colors.yellowAccent,
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 点击事件,设置动画开始
_controller.forward();
},
child: const Icon(Icons.start),
),
);
}
buildItem(String content, Color backgroundColor) {
return Container(
width: 100,
height: 100,
alignment: Alignment.center,
color: backgroundColor,
child: Text(content),
);
}
}
动画效果是从左上角到右下角。
网友评论