我可以在一个 LineSeries 中使用多个 ItemRenderer 吗? [英] Can I use multiple ItemRenderer with one LineSeries?
本文介绍了我可以在一个 LineSeries 中使用多个 ItemRenderer 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
目前我已经创建了下面的类,它扩展了 ItemRenderer 来为折线图中的所有数据点添加标签.
Currently I have created below class which extends ItemRenderer to add labels for all data points in Line Chart.
package lib
{
public class LineChartLabelRenderer extends UIComponent implements IDataRenderer, IFactory
{
private var _label:Label;
public var solidColor:SolidColor;
public function newInstance():*
{
return new LineChartLabelRenderer();
}
public function LineChartLabelRenderer():void
{
super();
_label = new Label();
addChild(_label);
_label.setStyle("color",0x000000);
_label.setStyle("fontSize",9);
}
private var _chartItem:ChartItem;
public function get data():Object
{
return _chartItem;
}
public function set data(value:Object):void
{
if (_chartItem == value){
return;
}
_chartItem = ChartItem(value);
if(_chartItem != null){
_label.text = LineSeriesItem(_chartItem).yValue.toString();
}
}
override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var ls:LineSeries = _chartItem.element as LineSeries;
solidColor = new SolidColor(ls.getStyle("fill"));
_label.setActualSize(_label.getExplicitOrMeasuredWidth(),20);
_label.move(unscaledWidth - _label.getExplicitOrMeasuredWidth() / 2 , this.unscaledHeight - _label.getExplicitOrMeasuredHeight() - 5);
}
}
}
效果很好.但是,由于 LineSeries 可能已经使用其他 ItemRenderer 进行设置,例如 CircleItemRenderer
或 BoxItemRenderer
.我找不到让我用一个 LineSeries 设置多个 ItemRender 的地方.我想知道这样做的最佳方法是什么.
It works well. However since the LineSeries may already be set with other ItemRenderer such as CircleItemRenderer
or BoxItemRenderer
. I found no where to let me set multiple ItemRender with one LineSeries. I want to know what the best way is to do this.
推荐答案
感谢 Sunil D.
Thanks to Sunil D.
最后我创建了如下扩展的 ItemRenderer
Finally I create extended ItemRenderer
like below
public class LSLabelCircleItemRenderer extends CircleItemRenderer
{
private var _label:Label;
public function LSLabelCircleItemRenderer():void
{
super();
_label = new Label();
}
override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(data != null){
var ls:LineSeries = ChartItem(data).element as LineSeries;
label.text = LineSeriesItem(data).yValue.toString();
skin.parent.addChild(label);
label.setStyle("color",ls.getStyle("fill"));
label.move(skin.x - label.getExplicitOrMeasuredWidth() / 5,skin.y - label.getExplicitOrMeasuredHeight());
}
}
}
这篇关于我可以在一个 LineSeries 中使用多个 ItemRenderer 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文