要用flex做股票行情软件了。
Flex让我不爽的地方在于,一些它做的控件其实做得并不完善,或者说是并没有考虑到实际的需求。
比如这个CandleStickChart里面的CandleStickSeries,可以设置fill和declineFill两种颜色,而那根蜡烛芯却不受这两个颜色控制,而是那个Stroke,是名符其实的一根线。当然还有boxStroke,是边框颜色的。
帮助文档里面的例子,干脆把这个Stroke和boxStroke都设成黑色,我怀疑这些开发人员都没看过真正的蜡烛图。
为了把那根最高-最低线颜色和fill/declineFill一致,不得不写as代码了(总的来说,我是抄SDK的):
找到这个CandlestickItemRenderer.as
仿照它的做法做一个别的ItemRenderer,比如CustomCandleStickRenderer
主要修改里面的updateDisplayList方法,由于懒得改CandleStickSeries的变量,这里我还是使用Stroke和boxStroke作为绿线和红线的变量:
原来的代码:
if (boxStroke)
boxStroke.apply(g);
else
g.lineStyle(0,0,0);
if (fill)
fill.begin(g,rc);
g.lineTo(rc.right, rc.top);
g.lineTo(rc.right, rc.bottom);
g.lineTo(rc.left, rc.bottom);
g.lineTo(rc.left, rc.top);
if (fill)
fill.end(g);
if (stroke)
{
stroke.apply(g);
g.moveTo(width / 2, 0);
g.lineTo(width / 2, (boxMin - max) * heightScaleFactor);
g.moveTo(width / 2, (boxMax - max) * heightScaleFactor);
g.lineTo(width / 2, height);
}
改成:
if (boxStroke && stroke) {
if (_chartItem.close > _chartItem.open)
boxStroke.apply(g);
else
stroke.apply(g);
}
else
g.lineStyle(0,0,0);
if (fill)
fill.begin(g,rc);
g.lineTo(rc.right, rc.top);
g.lineTo(rc.right, rc.bottom);
g.lineTo(rc.left, rc.bottom);
g.lineTo(rc.left, rc.top);
if (fill)
fill.end(g);
if (boxStroke && stroke)
{
g.moveTo(width / 2, 0);
g.lineTo(width / 2, (boxMin - max) * heightScaleFactor);
g.moveTo(width / 2, (boxMax - max) * heightScaleFactor);
g.lineTo(width / 2, height);
}
然后在原来的CandleStickSeries的属性里面加这么一行:
itemRenderer=”CustomCandleStickRenderer”