Flutter 颤振变换。将动画从窗口小部件的中心平移到窗口小部件的中心
在下面的动画中,实现了将中心转换为使用Flutter 颤振变换。将动画从窗口小部件的中心平移到窗口小部件的中心,flutter,flutter-animation,Flutter,Flutter Animation,在下面的动画中,实现了将中心转换为使用elasticIn和elasticOut 不幸的是,我的实现不是小部件的中心,我无法设置它 import 'package:flutter/material.dart'; void main()=>runApp(MaterialApp(home: App(),)); class App extends StatefulWidget { @override State<StatefulWidget> createState() =
elasticIn
和elasticOut
不幸的是,我的实现不是小部件的中心,我无法设置它
import 'package:flutter/material.dart';
void main()=>runApp(MaterialApp(home: App(),));
class App extends StatefulWidget {
@override
State<StatefulWidget> createState() =>_App();
}
class _App extends State<App> with TickerProviderStateMixin {
AnimationController controller;
Animation<double> animationRadiusIn;
Animation<double> animationRadiusOut;
final double initialRadius = 55.0;
double radius = 0.0;
@override
void initState() {
super.initState();
controller = AnimationController(vsync: this, duration: Duration(seconds: 5));
animationRadiusIn =
Tween<double>(begin: 1.0, end: 0.5).animate(CurvedAnimation(parent: controller, curve: Interval(0.75, 1.0, curve: Curves.elasticIn)));
animationRadiusOut =
Tween<double>(begin: 0.5, end: 1.0).animate(CurvedAnimation(parent: controller, curve: Interval(0.0, 0.25, curve: Curves.elasticOut)));
controller.addListener(() {
setState(() {
if (controller.value >= 0.75 && controller.value <= 1.0) {
radius = animationRadiusIn.value * initialRadius;
} else if (controller.value >= 0.0 && controller.value <= 0.25) {
radius = animationRadiusOut.value * initialRadius;
}
});
});
controller.repeat();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
Center(
child: Transform.translate(
offset: Offset(radius,radius),
child:FlutterLogo(),
),
),
],
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MaterialApp(home:App(),);
类应用程序扩展StatefulWidget{
@凌驾
State createState()=>_App();
}
类应用程序使用TickerProviderStateMixin扩展状态{
动画控制器;
动画辐射;
动画半径输出;
最终双初始半径=55.0;
双半径=0.0;
@凌驾
void initState(){
super.initState();
controller=AnimationController(vsync:this,duration:duration(秒:5));
放射性核素=
Tween(开始:1.0,结束:0.5)。动画(曲线动画(父对象:控制器,曲线:间隔(0.75,1.0,曲线:Curves.elasticIn));
动画半径输出=
Tween(开始:0.5,结束:1.0)。动画(曲线动画(父对象:控制器,曲线:间隔(0.0,0.25,曲线:Curves.elasticOut));
controller.addListener(){
设置状态(){
如果(controller.value>=0.75&&controller.value=0.0&&controller.value,为什么不使用AlignTransition
/SlideTransition
?参见和@pskink,这意味着开始和结束曲线。elasticIn
和曲线。elasticOut
从中心到中心的动画,为什么不使用AlignTransition
//code>SlideTransition
?参见和@pskink,表示开始和结束曲线。elasticIn
和曲线。elasticOut
从中心到中心的动画