drawPath static method
dynamic
drawPath(
- dynamic canvas,
- dynamic path,
- dynamic paint,
- dynamic pathList,
- dynamic property,
Implementation
static drawPath(canvas, path, paint, pathList, property) {
if (pathList == null || pathList.isEmpty) {
return;
}
path.reset();
int i = 0, il = pathList.length;
for (; i < il; i++) {
var d = pathList[i];
if (d[0] == 'moveTo') {
//移动到某个点
path.moveTo(d[1][0], d[1][1]);
} else if (d[0] == 'lineTo') {
path.lineTo(d[1][0], d[1][1]);
}
}
if (property['close'] == true) {
path.close(); //是否闭合路径
}
if (property.containsKey('gradient') &&
property['gradient'] &&
property.containsKey('shaderId') &&
property['shaderId'] != '') {
String shaderId = property['shaderId'];
if (property['gradientType'] == 'LinearGradient') {
//线性渐变
if (shaderMap[shaderId] == null) {
shaderMap[shaderId] = LinearGradient(
begin: FractionalOffset(0.5, 0),
end: FractionalOffset(0.5, 1.0),
colors: property['gradientColors']!,
).createShader(Rect.fromLTWH(
property['gradientSize'][0],
property['gradientSize'][1],
property['gradientSize'][2],
property['gradientSize'][3]));
}
paint.shader = shaderMap[shaderId];
} else if (property['gradientType'] == 'RadialGradient') {
//放射渐变
if (shaderMap[shaderId] == null) {
shaderMap[shaderId] = RadialGradient(
center: property['gradientCenter'],
radius: property['gradientRadius'],
colors: property['gradientColors'],
).createShader(Rect.fromLTWH(
property['gradientSize'][0],
property['gradientSize'][1],
property['gradientSize'][2],
property['gradientSize'][3]));
}
paint.shader = shaderMap[shaderId];
} else if (property['gradientType'] == 'SweepGradient') {
// 扇形渐变
if (shaderMap[shaderId] == null) {
shaderMap[shaderId] = SweepGradient(
center: property['gradientCenter'], // 渐变中心点
startAngle: property['gradientStartAngle'], // 起始角度(弧度制)
endAngle: property['gradientEndAngle'], // 结束角度(π弧度,即180度)
colors: property['gradientColors'],
stops: property['gradientStops'], // 颜色分布位置(可选)
).createShader(Rect.fromLTWH(
property['gradientSize'][0],
property['gradientSize'][1],
property['gradientSize'][2],
property['gradientSize'][3])); // 定义渐变区域
}
paint.shader = shaderMap[shaderId];
}
} else {
paint.shader = null;
}
if (!property.containsKey('dottedLine') || !property['dottedLine']) {
//实线
canvas.drawPath(path, paint);
} else {
// 虚线
paintDashedPath(canvas, path, paint, property['dottedLineLength'],
property['dottedLineLength']);
}
}