隐藏图表项基于某个值

时间:2011-09-20 22:59:30

标签: flex animation charts itemrenderer

我有一个带有'itemRenderer'的情节图表来渲染文本。我让渲染器工作正常。现在,如果它低于/高于某个值,我想显示/隐藏一些图表组合。我使用'Label'组件作为'itemRenderer'并覆盖'data'函数(请在下面找到我的渲染器组件..)。

如果图表数据提供者的大小大于“100”,我想隐藏所有“事件”,其严重程度为“低”。为此,我需要获得对数据提供者的引用,但不确定如何...?

有没有人遇到过这个问题?

public class EventChartItemRenderer extends Label
{
    private var chartItem:ChartItem;
    private var evtLblTxt:String;
    private var txtBorderColor:uint;
    private var showHide:Boolean;

    public function EventChartItemRenderer()
    {
        super();
    }

    override public function set data(val:Object):void {

        chartItem = val as ChartItem;

        var event:DeviceEventDetails = chartItem.item as DeviceEventDetails;
        if(event.severity == 2){
            evtLblTxt = "2";
            txtBorderColor = 0xFFD685;
            showHide = false;
        }else if(event.severity == 4){
            evtLblTxt = "4";
            txtBorderColor = 0xE68D53;
            showHide = true;
        }else if(event.severity == 6){
            evtLblTxt = "6";
            txtBorderColor = 0xB870DB;
            showHide = true;
        }
    }

    override public function get data():Object {

        return chartItem;
    }

    override protected function commitProperties():void {

        super.commitProperties();
        if(!showHide) return;
        this.text = evtLblTxt;
        this.setStyle("color", txtBorderColor);
        this.setStyle("fontWeight", "bold");
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {

        super.updateDisplayList(unscaledWidth, unscaledHeight);

        if(!showHide) return;
        var rc:Rectangle = new Rectangle(0, 0, unscaledWidth, unscaledHeight);
        var g:Graphics = graphics;
        g.clear();        
                    g.moveTo(rc.left, rc.top);
        g.lineStyle(1, txtBorderColor, 0.8);
        g.lineTo(rc.width, rc.top);
        g.lineTo(rc.width, rc.bottom+4);
        g.lineTo(rc.left, rc.bottom+4);
        g.lineTo(rc.left, rc.top);
        g.endFill();    
    }
}

它实际上是chartItem.element。并且您需要将其强制转换为'ChartElement',因为'element'指的是接口'IChartElement'并访问'dataProvider'属性。 'chartDataProvider'是只写的。因此,正确的访问方式是......

(chartItem.element as ChartElement).dataProvider。

1 个答案:

答案 0 :(得分:0)

ChartItem具有IChartElement属性,可以访问图表数据提供者:

chartItem.item.chartDataProvider.length > 100