大佬教程收集整理的这篇文章主要介绍了Flutter 动画鼻祖之CustomPaint,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
CustomPaint的用法非常简单,如下:
CustomPaint(
painter: MyCustomPainter(),)
@H_12_0@myCustomPainter定义如下:
class MyCustomPainter extends CustomPainter {
@override
void paint(Canvas canvas,Size sizE) {}
@override
bool shouldRepaint(MyCustomPainter oldDelegatE) {
return this != oldDelegate;
}
}
上面的MyCustomPainter为了看起来清晰,什么也没有做,通常情况下,在paint
方法内绘制自定义的效果。shouldRepaint
方法通常在当前实例和旧实例属性不一致时返回true。
paint
通过canvas
绘制,size
为当前控件的大小,下面看看canvas
的方法。
Paint _paint = Paint()
..color = Colors.red
..@R_419_1633@Width = 3;
@override
void paint(Canvas canvas,Size sizE) {
var points = [
Offset(0,0),Offset(size.width / 2,size.height / 2),Offset(size.width,size.height),];
canvas.drawPoints(PointMode.points,points,_paint);
}
PointMode
有3种模式:
canvas.drawLine(Offset(0,_paint);
Paint _paint = Paint()
..color = Colors.red
..style = PainTingStyle.@R_419_1633@
..@R_419_1633@Width = 3;
@override
void paint(Canvas canvas,Size sizE) {
print('size:$size');
var _path = Path()
..moveTo(0,0)
..lineTo(size.width,size.height)
..close();
canvas.drawPath(_path,_paint);
}
这里注意Paint.style
,还可以设置为PainTingStyle.fill
,效果如下:
此时Path的路径不要在一条直线上,否则会看不到效果。
绘制圆形
canvas.drawCircle(Offset(size.width/2,size.height/2),20,_paint);
绘制椭圆
canvas.drawOval(Rect.fromLTRB(0,size.width,_paint);
如果给定的Rect为正方形,那么椭圆将会变为圆形。
绘制弧
canvas.drawArc(
Rect.fromLTRB(0,pi/2,true,_paint);
绘制圆角矩形
canvas.drawRRect(
RRect.fromLTRBR(0,size.height,Radius.circular(10)),_paint)
canvas
还有很多绘制函数,比如贝塞尔曲线、三次贝塞尔曲线、画布的反转等操作,这里不在一一介绍。
这些函数和Android的Canvas基本一样,如果你有Android基础,直接套用即可。
///
/// 绘制花骨朵
///
_drawFlower(Canvas canvas,Size sizE) {
//将花变为红色
if (flowerPaths.length >= RoseData.flowerPoints.length) {
var path = Path();
for (int i = 0; i < flowerPaths.length; i++) {
if (i == 0) {
path.moveTo(flowerPaths[i].dx,flowerPaths[i].dy);
} else {
path.lineTo(flowerPaths[i].dx,flowerPaths[i].dy);
}
}
_paint.style = PainTingStyle.fill;
_paint.color = _flowerColor;
canvas.drawPath(path,_paint);
}
//绘制线
_paint.style = PainTingStyle.@R_419_1633@;
_paint.color = _@R_419_1633@Color;
//去掉最后2个点,最后2个点为了绘制红色
var points = flowerPaths.sublist(0,max(0,flowerPaths.length - 2));
canvas.drawPoints(PointMode.polygon,_paint);
}
花骨朵的绘制只通过canvas.drawPath
就实现了,其实整个玫瑰花的绘制都是通过canvas.drawPath
加上动画控制实现的。
CustomPaint可以实现任何你想要的动画的效果,比如绘画版就可以通过此控件实现。
老孟Flutter博客地址(近200个控件用法):http://laomengit.com
欢迎加入Flutter交流群(微信:laomENGIt)、关注公众号【老孟Flutter】:
以上是大佬教程为你收集整理的Flutter 动画鼻祖之CustomPaint全部内容,希望文章能够帮你解决Flutter 动画鼻祖之CustomPaint所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。