在Flex几个通用Chart图形中画指定值的线条(指定刻度的线条)
2010-11-26 18:05
323 查看
在Flex几个通用Chart图形中画指定值的线条(指定刻度的线条)
问题来源:业务上要为Flex ColumnChart中画出一个以0这刻度的临界线。
问题分析:但是对Chart的backgroundElements中默认是GridLines,没有可用的用于指定刻度的线条,于是自己加了个HRule对象。
问题解决:加入HRule,设置它不同于GridLines的颜色,当然可以通过strokeWidth设置它的宽度,默认是2px,最重要的是设置它的位置。如下详细分析:
算出刻度的最大值和最小值:
va.minimum = 38.6
va.maximum = 41.400000000000006
算出所画容器的高度:
Father componnet height = 475
想像图:
于是分析得到如下位置计算公式:
y="{(((axis_score.maximum + axis_score.minimum) / 2 - 0) / (axis_score.maximum - axis_score.minimum)) * cs_3.height}"
关键解决代码:
问题推广:本文只设计了HRule是横向的线条,同理,可以很方便设计出纵向的线条,可以指定在哪一个值的刻度线或叫作临界线,当然还可以添加多条指定值的线。
可以运行的Demo代码:
Demo效果图:
后记:
后来在编译时又发现了如下的警告:
Data binding will not be able to detect assignments to "maximum"
而且在实际动态处理数据时确实没有实时刷新过来。
我查看了LinearAxis类中的代码,发现maximum有get和set方法,是对computedMaximum进行处理,于是我直接写成:
y="{(((axis_score.computedMaximum + axis_score.computedMinimum) / 2 - 0) / (axis_score.computedMaximum - axis_score.computedMinimum)) * cs_3.height}"
但编译器还是报了同样的错误,这是因为我们在处理对LinearAxis对象加了[Bindable]还不够,还要在其定义的时候加入[Bindable],这样我只好要自己写一个继承LinearAxis类的子类。
但是我又不想这样,于是我写了个很笨的方法,那就是加了一个定时器,定时刷新LinearAxis对象的y偏移量,于是增加了如下代码:
在应用程序初始化时加入如下代码:
并增加了如下定时刷新函数:
当然,我为那条横线增加了一个id属性,名字就叫做zeroLineHRule,如下代码所示:
问题来源:业务上要为Flex ColumnChart中画出一个以0这刻度的临界线。
问题分析:但是对Chart的backgroundElements中默认是GridLines,没有可用的用于指定刻度的线条,于是自己加了个HRule对象。
问题解决:加入HRule,设置它不同于GridLines的颜色,当然可以通过strokeWidth设置它的宽度,默认是2px,最重要的是设置它的位置。如下详细分析:
算出刻度的最大值和最小值:
va.minimum = 38.6
va.maximum = 41.400000000000006
算出所画容器的高度:
Father componnet height = 475
想像图:
于是分析得到如下位置计算公式:
y="{(((axis_score.maximum + axis_score.minimum) / 2 - 0) / (axis_score.maximum - axis_score.minimum)) * cs_3.height}"
关键解决代码:
<mx:backgroundElements> <mx:GridLines direction="horizontal" > <mx:horizontalStroke> <mx:Stroke color="black" weight="0" alpha="0.2" /> </mx:horizontalStroke> </mx:GridLines> <mx:HRule y="{(((va.maximum + va.minimum) / 2 - 41) / (va.maximum - va.minimum)) * ls.height}" strokeColor="0xff0000" shadowColor="0xff0000"/> </mx:backgroundElements>
问题推广:本文只设计了HRule是横向的线条,同理,可以很方便设计出纵向的线条,可以指定在哪一个值的刻度线或叫作临界线,当然还可以添加多条指定值的线。
可以运行的Demo代码:
<?xml version="1.0"?> <!-- http://blog.flexexamples.com/2007/11/15/changing-the-horizontal-grid-line-frequency-in-a-flex-linechart-control-using-the-horizontalchangecount-style/ --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" viewSourceURL="srcview/index.html"> <mx:XMLListCollection id="dp"> <mx:source> <mx:XMLList> <quote date="8/27/2007" open="40.38" close="40.81" /> <quote date="8/24/2007" open="40.5" close="40.41" /> <quote date="8/23/2007" open="40.82" close="40.6" /> <quote date="8/22/2007" open="40.4" close="40.77" /> <quote date="8/21/2007" open="40.41" close="40.13" /> <quote date="8/20/2007" open="40.55" close="40.74" /> <quote date="8/17/2007" open="40.18" close="40.32" /> <quote date="8/16/2007" open="39.83" close="39.96" /> <quote date="8/15/2007" open="40.22" close="40.18" /> <quote date="8/14/2007" open="41.01" close="40.41" /> <quote date="8/13/2007" open="41" close="40.83" /> <quote date="8/10/2007" open="41.3" close="41.06" /> <quote date="8/9/2007" open="39.9" close="40.75" /> <quote date="8/8/2007" open="39.61" close="40.23" /> <quote date="8/7/2007" open="39.08" close="39.42" /> <quote date="8/6/2007" open="38.71" close="39.38" /> <quote date="8/3/2007" open="39.47" close="38.75" /> <quote date="8/2/2007" open="39.4" close="39.52" /> <quote date="8/1/2007" open="40.29" close="39.58" /> </mx:XMLList> </mx:source> </mx:XMLListCollection> <mx:LineChart id="lineChart" showDataTips="true" dataProvider="{dp}" width="100%" height="100%"> <mx:backgroundElements> <mx:GridLines direction="horizontal" > <mx:horizontalStroke> <mx:Stroke color="black" weight="0" alpha="0.2" /> </mx:horizontalStroke> </mx:GridLines> <mx:HRule y="{(((va.maximum + va.minimum) / 2 - 41) / (va.maximum - va.minimum)) * ls.height}" strokeColor="0xff0000" shadowColor="0xff0000"/> </mx:backgroundElements> <!-- vertical axis --> <mx:verticalAxis> <mx:LinearAxis id="va" baseAtZero="false" title="Price" /> </mx:verticalAxis> <!-- horizontal axis --> <mx:horizontalAxis> <mx:CategoryAxis id="ca" categoryField="@date" title="Date" /> </mx:horizontalAxis> <!-- horizontal axis renderer --> <mx:horizontalAxisRenderers> <mx:AxisRenderer axis="{ca}" canDropLabels="true" /> </mx:horizontalAxisRenderers> <!-- series --> <mx:series> <mx:LineSeries id="ls" yField="@open" displayName="Open" /> </mx:series> </mx:LineChart> </mx:Application>
Demo效果图:
后记:
后来在编译时又发现了如下的警告:
Data binding will not be able to detect assignments to "maximum"
而且在实际动态处理数据时确实没有实时刷新过来。
我查看了LinearAxis类中的代码,发现maximum有get和set方法,是对computedMaximum进行处理,于是我直接写成:
y="{(((axis_score.computedMaximum + axis_score.computedMinimum) / 2 - 0) / (axis_score.computedMaximum - axis_score.computedMinimum)) * cs_3.height}"
但编译器还是报了同样的错误,这是因为我们在处理对LinearAxis对象加了[Bindable]还不够,还要在其定义的时候加入[Bindable],这样我只好要自己写一个继承LinearAxis类的子类。
但是我又不想这样,于是我写了个很笨的方法,那就是加了一个定时器,定时刷新LinearAxis对象的y偏移量,于是增加了如下代码:
protected var commitTimer:Timer = new Timer(1000, 1);/** 定时器 */
在应用程序初始化时加入如下代码:
/** 无奈的时间刷新零界线 */ commitTimer.addEventListener(TimerEvent.TIMER_COMPLETE, commitTimerCompleteHandler); commitTimer.reset(); commitTimer.start();
并增加了如下定时刷新函数:
/** 定时刷新函数 */ protected function commitTimerCompleteHandler(event:TimerEvent):void { zeroLineHRule.y = (((axis_score.computedMaximum + axis_score.computedMinimum) / 2 - 0) / (axis_score.computedMaximum - axis_score.computedMinimum)) * cs_3.height; commitTimer.reset(); commitTimer.start(); }
当然,我为那条横线增加了一个id属性,名字就叫做zeroLineHRule,如下代码所示:
<!-- 零界线 --> <mx:HRule id="zeroLineHRule" y="{(((axis_score.computedMaximum + axis_score.computedMinimum) / 2 - 0) / (axis_score.computedMaximum - axis_score.computedMinimum)) * cs_3.height}" strokeColor="0xff0000" shadowColor="0xff0000" visible="{cb_1.selected || cb_2.selected || cb_3.selected}" />
相关文章推荐
- 如何去除FLEX LINECHART 线条阴影
- Flex 图形标绘——线条、箭头的绘制
- Flex: 通过horizontalTickAligned和verticalTickAligned样式指定线图LineChart横竖方向轴心标记
- Flex中如何通过horizontalTickAligned和verticalTickAligned样式指定线图LineChart横竖方向轴心标记的例子
- Flex :给LineChart设置坐标轴最大最小范围,以及设置纵坐标的线条间隔,数值间隔的例子
- 在Flex中的LineChart线条上显示Label标识
- Flex中如何通过lineStroke样式改变LineChart图表线条颜色的例子
- 如何去除FLEX LINECHART 线条阴影
- 轻量级图形报表工具JSCharts (JSChart),内置函数中文参考(二)
- EF获取指定字段通用方法
- flex中使用AS3在画出的图形中添加文字
- 基于.net webservices和Flex LineChart组件的动态数据监控
- 实现通用 Web CAPTCHA 图形验证码 JavaScript 脚本 API 服务 (JavaScript 脚本动态页面引用)
- 使用 Flex 呈现可缩放矢量图形和位图
- SSIS几个通用属性
- 提取图形中指定颜色的所有像素_opencv/c++
- Eclipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法
- Android ImageLoader 显示圆角图片,可指定图片某几个角为圆角
- Achartengine.jar绘制动态图形一 --饼图
- 解决“无任何网络提供程序接受指定的网络路径”问题的几个方法