drawChart method
void
drawChart(
- Canvas canvas,
- Size size
)
override
Implementation
@override
void drawChart(Canvas canvas, Size size) {
canvas.save();
canvas.translate(mTranslateX * scaleX, 0.0);
canvas.scale(scaleX, 1.0);
for (int i = mStartIndex; datas != null && i <= mStopIndex; i++) {
KLineEntity? curPoint = datas?[i];
if (curPoint == null) continue;
KLineEntity lastPoint = i == 0 ? curPoint : datas![i - 1];
double curX = getX(i);
double lastX = i == 0 ? curX : getX(i - 1);
mMainRenderer.drawChart(lastPoint, curPoint, lastX, curX, size, canvas);
mVolRenderer?.drawChart(lastPoint, curPoint, lastX, curX, size, canvas);
mSecondaryRenderer?.drawChart(
lastPoint, curPoint, lastX, curX, size, canvas);
}
// 移除了十字线绘制,现在由base_chart_painter负责
if (isTrendLine == true) drawTrendLines(canvas, size);
canvas.restore();
// 在恢复canvas状态后绘制绘图工具,避免受到缩放和平移影响
if (drawingToolManager != null) {
debugPrint('ChartPainter.drawChart: 开始绘制绘图工具');
// 直接绘制,因为绘图工具存储的已经是屏幕坐标
drawingToolManager!.drawTools(
canvas,
size,
1.0, // scaleX = 1.0,因为不需要额外缩放
0.0, // scrollX = 0.0,因为不需要额外偏移
(index) => index, // getX: 直接返回输入值(屏幕坐标)
(price) => price, // getY: 直接返回输入值(屏幕坐标)
);
}
}