Flutter绘制雪人

在这里插入图片描述```java
class SnowMan extends StatefulWidget {
@override
_SnowManState createState() => _SnowManState();
}

class _SnowManState extends State with SingleTickerProviderStateMixin {
AnimationController _controller;

@override
void initState() {
_controller = AnimationController(duration: Duration(seconds: 4),vsync: this);
_controller.repeat();
super.initState();
}

@override
void dispose() {
_controller.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
List snowFlakes=List.generate(100, (index)=>SnowFlake());
return Container(
height: double.infinity,
width: double.infinity,
decoration: BoxDecoration(
color: Colors.blue,
gradient: LinearGradient(
colors: [Colors.blue,Colors.blue[300],Colors.white],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0.0,0.5,1.0]
)
),
child: AnimatedBuilder(
animation:controller,
builder: (
,__) {
return CustomPaint(
painter: MyCustom(snowFlakes),
);
},
),
);
}
}

class MyCustom extends CustomPainter {
final myPaint=Paint()…color=Colors.white;
final snowFlakes;

MyCustom(this.snowFlakes);
@override
void paint(Canvas canvas, Size size) {
// TODO: implement paint
print(size);
canvas.drawCircle(size.center(Offset(0,55)), 50, myPaint);
canvas.drawOval(Rect.fromCenter(
center: size.center(Offset(0,200)),
width: 150,
height: 200
), myPaint);
snowFlakes.forEach((snowFlake){
canvas.drawCircle(Offset(snowFlake.x,snowFlake.y), snowFlake.radius, myPaint);
snowFlake.fall();
});
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;

}

class SnowFlake{
double x=Random().nextDouble()*375;
double y=Random().nextDouble()*812;
double velocity=Random().nextDouble()*2+2;//速度
double radius=Random().nextDouble()*2+2;//大小

fall(){//下落
y+=velocity;
if(y>800){
x=Random().nextDouble()*375;
y=0;
velocity=Random().nextDouble()*2+2;
radius=Random().nextDouble()*2+2;
}
}
}


猜你喜欢

转载自blog.csdn.net/qq_42572245/article/details/107252582