kCrossPath method
dynamic
kCrossPath(
- dynamic x,
- dynamic y,
- dynamic w,
- dynamic h,
Implementation
kCrossPath(x, y, w, h) {
// 刻度矩形块样式,使用十字线的填充颜色,把描边去掉
var pathData = {};
var linePath = [];
var addLinePath = [];
var txtPath = [];
mPreKData = null;
mKData = null;
klineState.crossTipPro['zdf'] = null;
klineState.crossTipPro['top'] = -1;
if (kMouseI < 0 || kMouseI >= kStopI) {
return null;
}
double padding = style['crossStyle']['property']['padding'];
double priceh = initYTxtH;
//也许可以通过文字测量获取
double timeh = initKXH;
var xTimeStr = Tools.intervalTimeFormat(
chartData.klineData[kMouseI]['time'],
klineState.widget.propertys['interval']);
var timeSize = Tools.getStrW(xTimeStr, style['crossStyle']['font']);
double timew = timeSize['width'] + padding * 2;
dynamic yp = '';
double px = 0, tx = 0;
if (kMouseX < timew / 2) {
//左对齐
px = 0;
} else if (kElement['k']!['w'] - kMouseX < timew / 2) {
//右对齐
px = kElement['k']!['w'] - timew;
} else {
//中间对齐
px = kMouseX - timew / 2;
}
tx = px + padding;
var ye = ypcallary;
var yei = 0;
for (; yei < ye.length; yei++) {
if (klineState.currentPosition.dx > ye[yei]['cx'] &&
klineState.currentPosition.dx < ye[yei]['cx'] + ye[yei]['cw'] - kYw &&
klineState.currentPosition.dy > ye[yei]['y'] &&
klineState.currentPosition.dy < ye[yei]['y'] + ye[yei]['h']) {
if (ye[yei]['type'] == "x" || ye[yei]['type'] == 'ftTip') {
//十字线 竖线
linePath.addAll([
[
"moveTo",
[kElement['k']!['x'] + kMouseX, y]
],
[
"lineTo",
[kElement['k']!['x'] + kMouseX, y + h]
]
]);
//x轴刻度背景矩形块
linePath.add([
"drawRect",
[kElement['k']!['x'] + px, y + h - timeh, timew, timeh,style['crossStyle']['property']['reactRound']]
]);
//x轴刻度文字默认居中对齐
txtPath.add([
xTimeStr,
kElement['k']!['x'] + tx,
y + h - timeh / 2,
{'ylayout': 'center'}
]);
} else {
num yw = initYW-20+padding*2;
num yx = yw+10-padding;
if (ye[yei]['type'] == "ft" && ye[yei]['name'] == Indicator['VOLUME']) {
yp = Tools.yToPrice(
ye[yei]['h'],
klineState.currentPosition.dy - ye[yei]['y'],
ye[yei]['min'],
ye[yei]['sc'],
klineState.widget.propertys['amountDigits']); //成交量方向写死1
yp = Tools.bigNumWithStr(num.parse(yp), 2);
} else {
yp = Tools.yToPrice(
ye[yei]['h'],
klineState.currentPosition.dy - ye[yei]['y'],
ye[yei]['min'],
ye[yei]['sc'],
klineState.widget.propertys['priceDigits']);
}
double yh = padding + priceh + padding;
var reactRound = style['crossStyle']['property']['reactRound'];
// var radio = reactRound; //矩形圆角参数
if (ye[yei]['type'] == "k") {
yh = padding +
priceh +
padding / 2 +
priceh +
padding; //两层高度,一个价格,一个涨跌幅
// radio = [0.0, reactRound, reactRound, 0.0];
}
double py = klineState.currentPosition.dy - yh / 2;
if (klineState.currentPosition.dy < yh / 2) {
//上对齐
py = 0;
} else if (klineState.currentPosition.dy > y + h - kXh - yh / 2) {
//下对齐
py = y + h - kXh - yh;
}
//十字线 横线 竖线
linePath.addAll([
[
"moveTo",
[ye[yei]['cx'], klineState.currentPosition.dy]
],
[
"lineTo",
[
ye[yei]['cx'] + ye[yei]['cw'] - yx,
klineState.currentPosition.dy
]
],
[
"moveTo",
[kElement['k']!['x'] + kMouseX, y]
],
[
"lineTo",
[kElement['k']!['x'] + kMouseX, y + h - timeh]
]
]);
//x轴y轴刻度背景矩形块
linePath.addAll([
// y轴背景不用绘制了,去kline里绘制
// [
// "drawRect",
// [ye[yei]['cx'] + ye[yei]['cw'] - yx, py, yw, yh, radio]
// ],
[
"drawRect",
[kElement['k']!['x'] + px, y + h - timeh, timew, timeh,reactRound]
]
]);
// 价钱不用绘制了,去kline里绘制
//y轴刻度
// txtPath.add([
// yp,
// ye[yei]['cx'] + ye[yei]['cw'] - yx+yw-padding,
// py + padding,
// {'xlayout': 'right'}
// ]);
//x轴刻度
txtPath.add([
xTimeStr,
kElement['k']!['x'] + tx,
y + h - timeh / 2,
{'ylayout': 'center'}
]);
if (ye[yei]['type'] == "k") {
crossYprice = double.parse(yp);
crossAddSize = {
'x': ye[yei]['cx'] + ye[yei]['cw'] - yx - 1 - priceh*1.5,
'y': py,
'w': priceh*1.5,
'h': yh
};
//横线绘制加号
addLinePath.add([
"drawRect",
[
crossAddSize['x'],
crossAddSize['y'],
crossAddSize['w'],
crossAddSize['h'],
[reactRound, 0.0, 0.0, reactRound]
]
]);
var txtX = crossAddSize['x'] + crossAddSize['w']/2;
var txtY = crossAddSize['y'] + yh/2;
addLinePath.add([
"drawCircle",
[txtX, txtY, (crossAddSize['w'] - 4) / 2]
]);
addLinePath.addAll([
[
"moveTo",
[txtX - (crossAddSize['w'] - 10) / 2, txtY]
],
[
"lineTo",
[txtX + (crossAddSize['w'] - 10) / 2, txtY]
]
]);
addLinePath.addAll([
[
"moveTo",
[txtX, txtY - (crossAddSize['w'] - 10) / 2]
],
[
"lineTo",
[txtX, txtY + (crossAddSize['w'] - 10) / 2]
]
]);
//涨跌幅文案 (最新成交价-当前Y轴移入价格)/最新成交价(百分数保留2位小数)
var lastKD = chartData.klineData[chartData.kDataL - 1];
dynamic change = Tools.toFixed(
((num.parse(yp) - lastKD['close']) / lastKD['close'] * 100), 2);
change = num.parse(change) > 0 ? "+$change%" : '$change%';
// 涨跌幅不用绘制了,去kline里绘制
// txtPath.add([
// change,
// ye[yei]['cx'] + ye[yei]['cw'] - yx+yw-padding,
// py + padding + priceh + padding / 2,
// {'xlayout': 'right'}
// ]);
klineState.crossTipPro['zdf'] = change;
}
klineState.crossTipPro['left'] = ye[yei]['cx'] + ye[yei]['cw'] - yx;
klineState.crossTipPro['top'] = py;
klineState.crossTipPro['w'] = yw;
klineState.crossTipPro['h'] = yh;
klineState.crossTipPro['price'] = yp;
}
mPreKData = kMouseI - 1 >= 0 ? chartData.klineData[kMouseI - 1] : null;
mKData = chartData.klineData[kMouseI];
if (mKData!['history'] == null) {
mKData!['history'] = [];
} else {
mKData!['history'] = [];
}
for (int hi = 0, hil = hisTradeDataPoint.length; hi < hil; hi++) {
Map hiItem = hisTradeDataPoint[hi];
if (hiItem['kDataI'] == kMouseI) {
mKData!['history'].add(hiItem);
}
}
break;
}
}
pathData = {'linePath': linePath, 'txtPath': txtPath,'addLinePath':addLinePath};
return pathData;
}