Flex实现ColumnChart柱图为圆角矩形并在柱子上方显示数值的itemRenderer
来源:互联网 发布:淘宝试用综合排名不足 编辑:程序博客网 时间:2024/04/28 02:17
自己写的itemRenderer,实现柱图为圆角矩形。并且根据值的最大最小值用不同的颜色显示在每个柱子的上方
ActionScript/Flex 代码
package itemRender{import flash.display.Graphics;import flash.geom.Rectangle;import mx.charts.ChartItem;import mx.charts.chartClasses.GraphicsUtilities;import mx.charts.series.ColumnSeries;import mx.charts.series.items.ColumnSeriesItem;import mx.collections.ArrayCollection;import mx.controls.Text;import mx.core.IDataRenderer;import mx.core.UIComponent;import mx.graphics.IFill;import mx.graphics.IStroke;import mx.graphics.SolidColor;import mx.styles.StyleManager;import mx.utils.ColorUtil; public class MyCol extends UIComponent implements IDataRenderer { private var _data:Object;private var l:Text ;[Inspectable(environment="none")] /** * The chartItem that this itemRenderer is displaying. * This value is assigned by the owning series */public function get data():Object{return _data;} protected function get showOtherLabel():Boolean{ return true; }private function getMMvalue(arr:ArrayCollection,yField:String):Array{var max:Number=Number.NEGATIVE_INFINITY;var min:Number=Number.POSITIVE_INFINITY;for each(var obj:Object in arr){if(!isNaN(Number(obj[yField]))){max = Math.max(max,Number(obj[yField]));min = Math.min(min,Number(obj[yField]));}}return [max,min];}protected function get colors():Array{return ["#008654","#d80000","#B600CC"];}private function getColor(max:Boolean=false,min:Boolean=false):String{var c:String= colors[0];if(max)c= colors[1];else if(min)c= colors[2];return c;}/** * @private */public function set data(value:Object):void{if (_data == value)return;_data = value;if(value is ColumnSeriesItem){if(l&&this.contains(l))this.removeChild(l);var csi:ColumnSeriesItem = ColumnSeriesItem(_data);var cs:ColumnSeries = ColumnSeries(csi.element);var arr:ArrayCollection = cs.dataProvider as ArrayCollection;var m:Array=getMMvalue(arr,cs.yField);var max:Boolean = Number(csi.yValue)==m[0];var min:Boolean = Number(csi.yValue)==m[1];if(max||min||(arr.length<13&&showOtherLabel)){l= new Text();if(max||min)l.setStyle("fontWeight","bold");this.addChild(l);if((value as ColumnSeriesItem).yValue)l.text= (value as ColumnSeriesItem).yValue.toString();//data label 标签会截掉最后一位,临时处理l.setStyle("color",getColor(max,min));l.setStyle("fontSize","14");}}}//-------------------------------------------------------------------------- // // Overridden methods // //--------------------------------------------------------------------------/** * @private */override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{var fill:IFill;var state:String = "";if(_data is ChartItem && _data.hasOwnProperty('fill')){state = _data.currentState;fill = _data.fill;} else fill = GraphicsUtilities.fillFromStyle(getStyle('fill'));var color:uint;var adjustedRadius:Number = 0;switch(state){case ChartItem.FOCUSED:case ChartItem.ROLLOVER:if(StyleManager.isValidStyleValue(getStyle('itemRollOverColor')))color = getStyle('itemRollOverColor');elsecolor = ColorUtil.adjustBrightness2(GraphicsUtilities.colorFromFill(fill),-20);fill = new SolidColor(color);adjustedRadius = getStyle('adjustedRadius');if(!adjustedRadius)adjustedRadius = 0;break;case ChartItem.DISABLED:if(StyleManager.isValidStyleValue(getStyle('itemDisabledColor')))color = getStyle('itemDisabledColor');elsecolor = ColorUtil.adjustBrightness2(GraphicsUtilities.colorFromFill(fill),20);fill = new SolidColor(GraphicsUtilities.colorFromFill(color));break;case ChartItem.FOCUSEDSELECTED:case ChartItem.SELECTED:if(StyleManager.isValidStyleValue(getStyle('itemSelectionColor')))color = getStyle('itemSelectionColor');elsecolor = ColorUtil.adjustBrightness2(GraphicsUtilities.colorFromFill(fill),-30);fill = new SolidColor(color);adjustedRadius = getStyle('adjustedRadius');if(!adjustedRadius)adjustedRadius = 0;break;}var stroke:IStroke = getStyle("stroke");var w:Number = stroke ? stroke.weight / 2 : 0;var rc:Rectangle = new Rectangle(w - adjustedRadius, w - adjustedRadius, width - 2 * w + adjustedRadius * 2, height - 2 * w + adjustedRadius * 2);var g:Graphics = graphics;g.clear();g.moveTo(rc.left,rc.top);if (stroke)stroke.apply(g);if (fill)fill.begin(g,rc);//圆角矩形g.drawRoundRect(w - adjustedRadius, w - adjustedRadius, width - 2 * w + adjustedRadius * 2, height - 2 * w + adjustedRadius * 2,15);//g.lineTo(rc.right,rc.top);//g.lineTo(rc.right,rc.bottom);//g.lineTo(rc.left,rc.bottom);//g.lineTo(rc.left,rc.top);if (fill)fill.end(g);if(l){l.setActualSize(l.textWidth+25,l.textHeight);l.move(-9,0-l.height);}} } }
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"><mx:Script><![CDATA[import mx.collections.ArrayCollection;[Bindable]private var demoArr:ArrayCollection=new ArrayCollection([{orgName:'杭州',amt:3654},{orgName:'嘉兴',amt:2000},{orgName:'绍兴',amt:1000},{orgName:'金华',amt:1200},{orgName:'宁波',amt:1800},{orgName:'台州',amt:560},{orgName:'丽水',amt:2300},{orgName:'湖州',amt:2900},{orgName:'衢州',amt:2600},{orgName:'温州',amt:1600},{orgName:'舟山',amt:1300}])]]></mx:Script><mx:SeriesInterpolate id="seriesInterpolate" duration="1000" /><mx:WipeRight id="wipeOut" duration="4000"/><mx:WipeRight id="wipeIn" duration="4000"/><mx:Stroke id="axisStroke" alpha="0.0"></mx:Stroke><mx:Stroke id="a" weight="3" color="#92c5c6" alpha=".9"/><mx:Zoom id="zoomOut" duration="800"/><mx:SeriesSlide id="seriesSlide" duration="1000" direction="up"/><mx:VBox width="100%" height="100%" backgroundColor="white" fontSize="12" horizontalAlign="center"><mx:ColumnChart id="columnChart" dataProvider="{this.demoArr}" width="100%" height="100%"><mx:backgroundElements><mx:GridLines id="gridLines" direction="both" horizontalTickAligned="false" verticalTickAligned="false"><mx:verticalStroke><mx:Stroke color="0xa6cecd" weight="30" alpha="0.4"/></mx:verticalStroke><mx:horizontalStroke><mx:Stroke color="0xa6cecd" weight="0.6" alpha="1"/></mx:horizontalStroke></mx:GridLines></mx:backgroundElements><mx:verticalAxisRenderers><mx:AxisRenderer axis="{va1}" tickLength="0" showLine="false" axisStroke="{a}"/></mx:verticalAxisRenderers><mx:horizontalAxis><mx:CategoryAxis categoryField="orgName" id="ca1"></mx:CategoryAxis></mx:horizontalAxis><mx:horizontalAxisRenderers><mx:AxisRenderer axis="{ca1}" tickLength="0" showLine="true" axisStroke="{a}"/></mx:horizontalAxisRenderers><mx:series><mx:ColumnSet type="clustered"><mx:ColumnSeries id="co2" itemRenderer="itemRender.MyCol" maxColumnWidth="15" yField="amt" xField="orgName" showEffect="{wipeOut}" hideEffect="{wipeIn}" showDataEffect="{seriesInterpolate}"><mx:verticalAxis><mx:LinearAxis baseAtZero="true" id="va1"/></mx:verticalAxis><mx:fill><mx:LinearGradient id="linearGradient1"><mx:entries><mx:Array><mx:GradientEntry color="0x004fcc" ratio="0.0" alpha="1.0"/><mx:GradientEntry color="0x0189ff" ratio="1.0" alpha="1.0"/></mx:Array></mx:entries></mx:LinearGradient></mx:fill></mx:ColumnSeries></mx:ColumnSet></mx:series><mx:seriesFilters><mx:Array/></mx:seriesFilters></mx:ColumnChart></mx:VBox></mx:Application>
如图:
- Flex实现ColumnChart柱图为圆角矩形并在柱子上方显示数值的itemRenderer
- Flex实现ColumnChart柱图为圆角矩形的itemRenderer
- flex -设置柱状图ColumnChart的彩虹柱子、点击单个柱子高亮显示(三)
- 柱状图使用实例--设置柱子上是否显示数值及数值的显示位置
- 判断一个柱子是圆柱还是矩形柱的代码
- 在FLEX的DATAGIRD中使用itemRenderer的一点心得
- Flex List 用嵌入的ItemRenderer实现CheckBox选中功能
- popwindow 显示在某一控件的上方
- 【android】让popupwindow显示在view的上方并与该view水平居中对齐
- 【android】让popupwindow显示在view的上方并与该view水平居中对齐
- 让popupwindow显示在view的上方并与该view水平居中对齐
- 让popupwindow显示在view的上方并与该view水平居中对齐
- flex -设置柱状图ColumnChart的鼠标显示标签、设置tip窗口的样式(二)
- flex ItemRenderer (flex实现QQ通信界面)
- flex itemRenderer CheckBox 的使用
- flex ColumnChart 中数据点的字体
- flex-设置简单的柱状图ColumnChart(一)
- jfreechart的饼图对应的每块都是有值注释显示的,柱图和线图如何在柱子或点旁边这个柱子或这个点的值呢?
- 公告:CSDN博客频道博客搬家功能上线!
- 关于Android模拟器键盘不能使用的解决方法
- flex3与flex4的区别
- 判断一个类(Class)里面是否有某个函数
- Asp.Net+Jquery.Ajax详解9-serialize和serializeArray
- Flex实现ColumnChart柱图为圆角矩形并在柱子上方显示数值的itemRenderer
- DSP之时钟与定时器之三RTC
- Ask Ziggy:通过语音进行搜索 同时得到语音答复
- Android仿QQ的设置与帮助使用PreferenceActivity 与 自定义PreferenceActivity
- 查找oracle比较慢的session和SQL
- C++运算符优先级顺序
- Spring与hibernate的整合(基于注解
- Linux Socket 编程小例
- struts2实现简单拦截器