用AS画一条线很简单,但如何在Chart上画平均线呢?下面介绍三种常用方法。
- 使用DataProvider。从数据提供者着手,将平均线看成是项目的y 值相等的直线。这种方法最简单,不用写多余的代码,不过由于DataProvider的数据项目会多出一个属性列,因此数据越多,效能越差。代码见DataProvider.mxml。
- 使用CartesianDataCanvas。在CartesianDataCanvas上可以使用图形API 很轻松地画图形。传递给图形API 的值为数据坐标形式,而非屏幕坐标形式。这种方法最实用,不过位于CartesianDataCanvas下层的对象会失去交互性。代码见CartesianDataCanvas.mxml。
- 使用DataTransform。当然,我们也可以在其它容器(如Cavas)上画平均线,不过首先得利用dataTransform属性将坐标值转换为屏幕坐标。代码见DataTransform.mxml。
暂时在开发过程中用第一种:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; [Bindable] public var dataCollection:ArrayCollection = new ArrayCollection([ {Month: "Jan", Income: 2000, Average:1840}, {Month: "Feb", Income: 1800, Average:1840}, {Month: "Mar", Income: 1400, Average:1840}, {Month: "Apr", Income: 1600, Average:1840}, {Month: "May", Income: 2400, Average:1840}]); ]]> </mx:Script> <mx:Panel> <mx:LineChart id="myChart" dataProvider="{dataCollection}" showDataTips="true" seriesFilters="[]"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="Month"/> </mx:horizontalAxis> <mx:series> <mx:LineSeries xField="Month" yField="Income" displayName="Income"/> <mx:LineSeries xField="Month" yField="Average" displayName="Average" lineStroke="{myStroke}" interactive="false" itemRenderer="utils.AverageLineRenderer"/> </mx:series> </mx:LineChart> </mx:Panel> <mx:Stroke id="myStroke" color="0x000099" weight="1"/> </mx:Application>