(四)显示节点的渲染器:itemRenderer="renderer.SolidColorCircleRenderer",可通过样式控制数据是否显示在图形上,比较复杂
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(chartItem && chartItem.hasOwnProperty("fill"))
{
var solidColor:SolidColor = chartItem.fill as SolidColor;
var circleRadius:int = chartItem.element.radius;
graphics.clear();
var labelPosition:String = getStyle("labelPosition") + "";
//可通过样式控制是否显示数据在图形上
if(labelPosition == "outside")
{
var labelColor:Number = parseInt(getStyle("labelColor") + "");
var labelSize:Number = parseInt(getStyle("labelSize") + "");
labelColor = isNaN(labelColor) ? solidColor.color : labelColor;
labelSize = isNaN(labelSize) ? 10 : labelSize;
var tf:TextFormat = new TextFormat(null, labelSize, labelColor);
var txt:TextField = new TextField();
if(labelFunction != null)
{
txt.text = labelFunction(chartItem);
}
else
{
txt.text = chartItem["yValue"] + "";
}
txt.setTextFormat(tf);
txt.width = txt.textWidth + 5;
var maxX:Number = chartItem["element"]["width"];
var maxY:Number = chartItem["element"]["height"];
var tx:Number = -txt.width/2 + circleRadius;
var ty:Number = -txt.textHeight - circleRadius;
// var bmData:BitmapData = new BitmapData(txt.width, txt.textHeight, true, 0x00FFFFFF);
var bmData:BitmapData = new BitmapData(100, 100, true, 0x00FFFFFF);
var txtX:Number = x + tx;
var txtY:Number = y + ty;
if(txtY < 0)
{
ty = txt.textHeight + 1;
}
if(txtX < 0)
{
tx = circleRadius;
}
if((txtX + txt.width) > maxX)
{
tx = -txt.width;
}
var mtx:Matrix = new Matrix(1, 0, 0, 1, tx, ty - 1);
bmData.draw(txt);
graphics.beginBitmapFill(bmData, mtx);
graphics.drawRect(tx, ty, txt.width, txt.textHeight);
graphics.endFill();
}
var thickness:Number = parseInt(getStyle("borderThickness") + "");
var fromIndex:Number = parseInt(getStyle("fromIndex") + "");
fromIndex = isNaN(fromIndex) ? Number.MAX_VALUE : fromIndex;
if(fromIndex >= chartItem.index)
{
graphics.lineStyle(thickness, 0xffffff, 1);
var itemColor:uint = solidColor.color;
if(colorFunction != null)
{
itemColor = colorFunction(chartItem, solidColor.color);
}
graphics.beginFill(itemColor, solidColor.alpha);
graphics.drawEllipse(0, 0, circleRadius * 2, circleRadius * 2);
}
graphics.endFill();
}
}