drawInnerCircle method
绘制内圈圆 || 内多边形、分割线 || 绘制文字
Implementation
drawInnerCircle(Canvas canvas, Size size) {
double innerRadius = radarMap.radius; // 内圆半径
var line = radarMap.line;
int ring = line?.line??1;
Color ringColor = line?.color??Colors.grey;
if (radarMap.shape == Shape.circle) {
/// 绘制五个圆环
for (int s = ring; s > 0; s--) {
canvas.drawCircle(
const Offset(0, 0),
innerRadius / ring * s,
mLinePaint
..color = ringColor
..style = PaintingStyle.stroke,
);
}
} else {
/// 绘制五个方环
///均分圆的度数
double delta = 2 * pi / elementLength;
for (int s = ring; s > 0; s--) {
///起始位置
var startRa = innerRadius/ring * s;
Path mapPath = Path();
///角度
double angle = 0;
mapPath.moveTo(0, -startRa);
for (int i = 0; i < elementLength; i++) {
angle += delta;
mapPath.lineTo(0 + startRa * sin(angle), 0 - startRa * cos(angle));
}
mapPath.close();
canvas.drawPath(
mapPath,
mLinePaint
..color = ringColor
..style = PaintingStyle.stroke,
);
}
}
// 图上画文字
if(lineText!=null){
// (s/ring).toStringAsFixed(2)
var maxWidth = 100.0;
for (int s = ring; s > 0; s--) {
///起始位置
var startRa = innerRadius/ring * s - radarMap.radius * 0.05;
Offset offset = Offset(-maxWidth/2, -startRa);
// fontSize: textStyle!.fontSize ?? radarMap.radius * 0.16,
final paragraphBuilder = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: TextAlign.center,
fontSize: line?.textFontSize ?? radarMap.radius * 0.1,
fontWeight: FontWeight.normal));
paragraphBuilder.pushStyle(ui.TextStyle(color: line?.textColor??Colors.black , textBaseline: ui.TextBaseline.alphabetic));
paragraphBuilder.addText(lineText!.call(s,ring));
var paragraph = paragraphBuilder.build();
paragraph.layout(ui.ParagraphConstraints(width: maxWidth));
canvas.drawParagraph(paragraph, offset);
}
}
// 遍历画线
for (var i = 0; i < elementLength; i++) {
canvas.save();
canvas.rotate(360 / elementLength * i.toDouble() / 180 * pi);
mLinePath.moveTo(0, -innerRadius);
mLinePath.relativeLineTo(0, innerRadius); //线的路径
canvas.drawPath(
mLinePath,
mLinePaint
..color = ringColor
..style = PaintingStyle.stroke); //绘制线
canvas.restore();
}
canvas.save();
canvas.restore();
}