我可以在一个 LineSeries 中使用多个 ItemRenderer 吗? [英] Can I use multiple ItemRenderer with one LineSeries?

查看:26
本文介绍了我可以在一个 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 进行设置,例如 CircleItemRendererBoxItemRenderer.我找不到让我用一个 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆