可以很容易地设定行程上的线系列是这样的:

<mx:LineSeries yField="apple">
    <mx:lineStroke>
        <mx:Stroke 
                    color="0x6699FF" 
                    weight="4" 
                    alpha=".8"
        />
    </mx:lineStroke>
</mx:LineSeries>

这将整个行程设定的α0.8

但我希望能够基于数据提供程序的东西来设置不同的α的行程每个情节。

例如在检测LineSeries的yField是“苹果”,这是它是如何知道在哪里绘制检测LineSeries。我希望能够加入像alphaField告诉它如何为每个情节行程阿尔法。

因此,如果我的数据提供程序是:

<result month="Jan-04">
    <apple>81768</apple>
    <alpha>1</alpha>
</result>
<result month="Feb-04">
    <apple>51156</apple>
    <alpha>1</alpha>
</result>
<result month="Mar-04">
    <apple>51156</apple>
    <alpha>.5</alpha>
</result>

和予设定alphaField="alpha"然后我将不得不从情节0固体笔划来绘制1,然后从区1 50%α行程来绘制2。

我怎样才能做到这一点???我期待在的commitProperties()和updateDisplayList()供LineSeries的方法,而且不知道将有什么需要添加/更改,使这个?

我敢肯定,这个类必须使用graphics.lineTo()的绘制每个情节,所以基本上就需要“搞定”当前alphaField值不知何故,并应用Graphics.lineStyle()用正确的字母之前绘制的每一行。

谢谢!


<强>更新

我已经得到了更接近我的答案。

当我延伸LineRenderer我重写的updateDisplayList()它调用GraphicsUtilities.drawPolyLine()

我延伸GraphicsUtilities并重写方法drawPolyLine(),因为这是当线实际上绘制。

我可以在这里调用lineStyle(),改变线的α...

<强>我仍然有1个事我不能drawPolyLine()方法内弄清楚,从我怎样才能访问该数据指示所述α应该是什么吗

感谢!!!!

有帮助吗?

解决方案

我使用的Flex SDK 4.0,但我相信它会在3.4正常工作。

用于ArrayCollection的而不是XML,因为它不是tsimus。

<mx:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/halo" >

    <fx:Script><![CDATA[
        import mx.charts.ChartItem;
        import mx.charts.renderers.CircleItemRenderer;
        import mx.collections.ArrayCollection;
        import mx.graphics.IFill;
        import mx.graphics.SolidColor;
        import mx.graphics.Stroke;

        import st.model.ViewModelLocator;

        [Bindable]
        private var modelLocator:st.model.ViewModelLocator = ViewModelLocator.getInstance() ;

        [Bindable]
        public var dp :ArrayCollection = new ArrayCollection([
            { test:0.1,alpha: 1 },
            { test:0.2,alpha: 0.5 },
            { test:0.3,alpha: 0.75 },
            { test:0.4,alpha: 0.25 },
            { test:0.5,alpha: 0.5 }
        ]);

        private function myFillFunction(element:ChartItem, index:Number):IFill {
            return new SolidColor(0x6699FF,Number(element.item.alpha));
        }
    ]]></fx:Script>

    <mx:ColumnChart id="myChart" dataProvider="{dp}">
        <mx:series>
            <mx:LineSeries lineStroke="{new Stroke(0x6699FF,4,0.1)}" width="100" height="100" yField="test" fillFunction="{myFillFunction}" itemRenderer="{new ClassFactory(mx.charts.renderers.CircleItemRenderer)}" />
        </mx:series>
    </mx:ColumnChart>

</mx:Application>

其他提示

您是否尝试过使用自定义项目渲染?

<mx:LineSeries>
  <mx:itemRenderer>
    <mx:Component>
      <mx:BoxItemRenderer scaleX="1" scaleY="1" alpha="{data.alpha}"/>
    </mx:Component>
  </mx:itemRenderer>
</mx:LineSeries>

这仅仅是一个简单的例子,但我认为的itemRenderer是要走的路。

drawPolyLine功能,您将得到pts:Array。这是特定SeriesItem的阵列。 对于Line系列,你会得到LineSeriesItem对象的数组。所以,如果你想获得你的X和Y轴值。你只需访问xValueyValueLineSeriesItem财产。像这样:pts[0].xValuepts[0].yValue


public static function drawPolyLine(g:Graphics, pts:Array,
                                     start:int, end:int,
                                     hProp:String, vProp:String,
                                     stroke:IStroke, form:Object,
                                     moveToStart:Boolean = true):void
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top