gpt4 book ai didi

android - 如何在 Flutter 中绘制矢量形状?

转载 作者:IT王子 更新时间:2023-10-29 06:38:53 24 4
gpt4 key购买 nike

我们正在尝试在 Flutter 中构建一个可以在运行时更改的自定义形状向量。

例如,我们需要一个披萨形状矢量小部件,我们可以根据变量值更改切片颜色。

我们尝试在 Flutter 中使用 canvas 和 painter,但他们没有清晰的文档。

我们也尝试过 SVG,但不幸的是 Flutter 也不支持 SVG 标签和 SVG View 。

最佳答案

您可以创建一个扩展 CustomPainter 的小部件

class Sky extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var rect = Offset.zero & size;
var gradient = new RadialGradient(
center: const Alignment(0.7, -0.6),
radius: 0.2,
colors: [const Color(0xFFFFFF00), const Color(0xFF0099FF)],
stops: [0.4, 1.0],
);
canvas.drawRect(
rect,
new Paint()..shader = gradient.createShader(rect),
);
}

@override
SemanticsBuilderCallback get semanticsBuilder {
return (Size size) {
// Annotate a rectangle containing the picture of the sun
// with the label "Sun". When text to speech feature is enabled on the
// device, a user will be able to locate the sun on this picture by
// touch.
var rect = Offset.zero & size;
var width = size.shortestSide * 0.4;
rect = const Alignment(0.8, -0.9).inscribe(new Size(width, width), rect);
return [
new CustomPainterSemantics(
rect: rect,
properties: new SemanticsProperties(
label: 'Sun',
textDirection: TextDirection.ltr,
),
),
];
};
}

// Since this Sky painter has no fields, it always paints
// the same thing and semantics information is the same.
// Therefore we return false here. If we had fields (set
// from the constructor) then we would return true if any
// of them differed from the same fields on the oldDelegate.
@override
bool shouldRepaint(Sky oldDelegate) => false;
@override
bool shouldRebuildSemantics(Sky oldDelegate) => false;
}

另见

关于android - 如何在 Flutter 中绘制矢量形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com