问题描述
我正在尝试从从中心打开的屏幕中心创建一个正方形动画(从很小的地方开始,然后从正方形的中心开始扩大自身,不幸的是,我的代码正在发生的事情是提供动画作为CustomPaint
中Rectangle的参数,Size(transitionTween.value,transitionTween.value)
的动画并未从中心向外生长from
,而是先从左/上顶点开始,将矩形向右扩大,而不是从如何获得使动画从中心开始和放大的效果
import 'package:Flutter/material.dart';
class PointToCircle extends StatefulWidget {
@override
_PointToCircleState createState() => _PointToCircleState();
}
class _PointToCircleState extends State<PointToCircle>
with TickerProviderStateMixin {
AnimationController _controller;
Animation<double> transitionTween;
// Animation<BorderRadius> borderRadius;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(milliseconds: 2000),vsync: this);
transitionTween = Tween<double>(
begin: 1.0,end: 200.0,).animate(
CurvedAnimation(
parent: _controller,curve: Curves.easeIn,),);
_controller.forward();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _controller,builder: (BuildContext context,Widget child) {
return Scaffold(
body: new Center(
child: CustomPaint(
painter: OpenPainter(transitionTween),)));
},);
}
}
class OpenPainter extends CustomPainter {
Animation<double> transitionTween;
OpenPainter(this.transitionTween);
@override
void paint(Canvas canvas,Size size) {
var paint1 = Paint()
..color = Colors.blue
..style = PaintingStyle.stroke;
canvas.drawRect(
Offset(-50,-100) & Size(transitionTween.value,transitionTween.value),paint1);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
解决方法
发现解决方案是在自定义绘画中添加size:Size(transition.value,transition.value);
,同时在矩形的大小内保留动态补间
但是我不明白现在的原因在起作用