`
luhantu
  • 浏览: 202921 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex chart 改变图表元素的颜色

    博客分类:
  • Flex
阅读更多

Flex 有许许多多的chart组件,他们的父类都是ChartBase。ChartBase下面有两个直接子类:CartesianChart 和 PolarChart。除了PieChart 继承自PolarChart外,其他的chart图形都继承自CartesianChart。因此如果像改变图表元素的颜色的话,就需要对这两种类型的chart做不同的处理。

在下面的例子里,我们在lengend 做一下定制来得到我们想要的结果。

主程序:

 

<?xml version="1.0"?>
<!-- Simple example to demonstrate the PieChart control. -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx">
	<fx:Script>
		<![CDATA[          
			import mx.charts.HitData;
			import mx.charts.series.PieSeries;
			import mx.charts.series.items.PieSeriesItem;
			import mx.collections.ArrayCollection;
			
			[Bindable]
			private var medalsAC:ArrayCollection = new ArrayCollection( [
				{ Country: "USA", Gold: 35, Silver:39, Bronze: 29 },
				{ Country: "China", Gold: 32, Silver:17, Bronze: 14 },
				{ Country: "Russia", Gold: 27, Silver:27, Bronze: 38 } ]);
			
			private function dataTipFunction(hitData:HitData):String
			{
				 var temp:String= (" " + (hitData.chartItem as PieSeriesItem).percentValue).substr(0,6);
				 //对于PieChart来说,PieSeriesItem有一个percentValue的值来标记百分比
				return hitData.item[(hitData.element as PieSeries).nameField] + "(" + temp + "%)"; 
			}
		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<mx:VDividedBox width="100%" height="100%">
		<mx:Panel title="Pie Chart" height="100%" width="100%">
			<mx:PieChart id="chart" 
						 height="100%" 
						 width="100%"
						 paddingRight="5" 
						 paddingLeft="5" 
						 showDataTips="true" 
						 dataTipFunction="dataTipFunction"
						 dataProvider="{medalsAC}">          
				<mx:series>
					<mx:PieSeries 
						nameField="Country"
						labelPosition="callout" 
						field="Silver">
						<mx:filters>
							<fx:Array/>
						</mx:filters>
					</mx:PieSeries>
				</mx:series>
			</mx:PieChart>  
			<mx:Legend dataProvider="{chart}" legendItemClass="com.skin.PolarLegendItem"/>
		</mx:Panel>
		<mx:Panel title="Column Chart" height="100%" width="100%">
			<mx:ColumnChart id="column" 
							height="100%" 
							width="45%" 
							paddingLeft="5" 
							paddingRight="5" 
							showDataTips="true" 
							dataProvider="{medalsAC}"
							>                
				<mx:horizontalAxis>
					<mx:CategoryAxis categoryField="Country"/>
				</mx:horizontalAxis>
				<mx:series>
					<mx:ColumnSeries 
						xField="Country" 
						yField="Gold" 
						displayName="Gold"
						/>
					<mx:ColumnSeries 
						xField="Country" 
						yField="Silver" 
						displayName="Silver"
						/>
					<mx:ColumnSeries 
						xField="Country" 
						yField="Bronze" 
						displayName="Bronze"
						/>
				</mx:series>
			</mx:ColumnChart>
			<mx:Legend dataProvider="{column}" legendItemClass="com.skin.CartesianLegendItem"/>
		</mx:Panel>
	</mx:VDividedBox>
</s:Application>
 CartesianLegendItem:
package com.skin
{
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.charts.LegendItem;
	import mx.charts.chartClasses.ChartElement;
	import mx.charts.chartClasses.GraphicsUtilities;
	import mx.charts.chartClasses.StackedSeries;
	import mx.charts.renderers.BoxItemRenderer;
	import mx.charts.series.ColumnSeries;
	import mx.charts.series.LineSeries;
	import mx.charts.series.PieSeries;
	import mx.controls.ColorPicker;
	import mx.core.IDataRenderer;
	import mx.core.IFlexDisplayObject;
	import mx.core.IInvalidating;
	import mx.core.UIComponent;
	import mx.events.DropdownEvent;
	import mx.graphics.IFill;
	import mx.graphics.SolidColor;
	import mx.graphics.SolidColorStroke;
	import mx.graphics.Stroke;
	import mx.skins.ProgrammaticSkin;
	import mx.utils.ColorUtil;
	
	public class CartesianLegendItem extends LegendItem {
		public function CartesianLegendItem() {
			super();
			this.buttonMode = true;
			this.mouseChildren = false;
			this.addEventListener(MouseEvent.CLICK,selecteLegend,false,0,true);

		}
		
		private function selecteLegend(e:MouseEvent):void
		{
			if(e.target is LegendItem)
			{
				var cp:ColorPicker = new ColorPicker();
				this.addChild(cp);
				cp.selectedColor = (element as UIComponent).getStyle("fill").color;//element 负责生成此图例项目的图表元素。
				cp.addEventListener(DropdownEvent.CLOSE, changeItemColor,false,0,true);
				cp.x = e.localX;
				cp.y = e.localY;
				cp.width = 0;
				cp.height = 0;
				cp.open();
			}
		}
		
		private function changeItemColor(e:DropdownEvent):void 
		{
			var solidColor:SolidColor = (element as UIComponent).getStyle("fill") as SolidColor;				
			if (solidColor != null)
			{
				solidColor.color = e.target.selectedColor;
			}
			(element as UIComponent).setStyle("fill",solidColor);
			var stroke:SolidColorStroke = (element as UIComponent).getStyle("stroke");
			if (stroke != null)
			{
				stroke.color = e.target.selectedColor;					
			}
			(element as UIComponent).setStyle("stroke",stroke);
			e.target.removeEventListener(DropdownEvent.CLOSE, changeItemColor,false);
			this.removeChild(e.target as DisplayObject);
			(this.marker as IInvalidating).invalidateDisplayList();
			(element as UIComponent).invalidateDisplayList();
			this.invalidateDisplayList();
		}
	}
}
 PolarLegendItem:
package com.skin
{
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.charts.LegendItem;
	import mx.charts.chartClasses.ChartElement;
	import mx.charts.chartClasses.GraphicsUtilities;
	import mx.charts.chartClasses.StackedSeries;
	import mx.charts.renderers.BoxItemRenderer;
	import mx.charts.series.ColumnSeries;
	import mx.charts.series.LineSeries;
	import mx.charts.series.PieSeries;
	import mx.controls.ColorPicker;
	import mx.core.IDataRenderer;
	import mx.core.IFlexDisplayObject;
	import mx.core.IInvalidating;
	import mx.core.UIComponent;
	import mx.events.DropdownEvent;
	import mx.graphics.IFill;
	import mx.graphics.SolidColor;
	import mx.graphics.SolidColorStroke;
	import mx.graphics.Stroke;
	import mx.skins.ProgrammaticSkin;
	import mx.utils.ColorUtil;
	
	public class PolarLegendItem extends LegendItem {
		public function PolarLegendItem() {
			super();
			this.buttonMode = true;
			this.mouseChildren = false;
			this.addEventListener(MouseEvent.CLICK,selecteLegend,false,0,true);
		}

		private function selecteLegend(e:MouseEvent):void
		{
			if(e.target is LegendItem)
			{
				var cp:ColorPicker = new ColorPicker();
				this.addChild(cp);
				cp.selectedColor =  (marker as IDataRenderer).data.fill.color;
				/*marker 此图例项目所显示的标记。因为对于PieChart来说,chart中每一块其实是一个PieSeries生产的,所以如果你
				用element来取值的话,你会发现每次element都是同样的。
				*/
				cp.addEventListener(DropdownEvent.CLOSE, changeItemColor,false,0,true);
				cp.x = e.localX;
				cp.y = e.localY;
				cp.width = 0;
				cp.height = 0;
				cp.open();
			}
		}
		
		private function changeItemColor(e:DropdownEvent):void 
		{		
				var solidColor:SolidColor = (marker as IDataRenderer).data.fill as SolidColor;				
				if (solidColor != null)
				{
					solidColor.color = e.target.selectedColor;
				}
				e.target.removeEventListener(DropdownEvent.CLOSE, changeItemColor,false);
				this.removeChild(e.target as DisplayObject);
				(marker as IInvalidating).invalidateDisplayList();
				(element as IInvalidating).invalidateDisplayList();
				this.invalidateDisplayList();
			}
	}
}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Flex Chart 图表3D展示

    4. **事件处理**:ActionScript和Flex提供了丰富的事件处理机制,使得用户与3D图表的交互变得可能,比如点击图表元素时触发特定操作。 5. **自定义样式和主题**:开发者可以通过自定义皮肤和样式来改变图表的颜色、...

    Flex Chart 使用教程(含源代码)

    3. 自定义样式:利用CSS样式表,可以改变图表的颜色、边框、背景等视觉元素,使其符合设计规范。 4. 图例:添加图例以标识不同数据系列,提高图表的可读性。 5. 分组和堆叠:对于多组数据,可以使用分组或堆叠的方式...

    flex Chart

    6. **样式和模板**:Flex Chart允许开发者通过CSS或MXML定义样式,自定义图表的颜色、边框、背景等外观,甚至可以创建自定义模板以改变图表的布局和行为。 7. **动画效果**:可以为图表添加平滑的动画效果,提高用户...

    flex chart

    标题 "flex chart" 指的是使用 Adobe Flex 技术创建的数据图表组件。Flex 是一个开源框架,主要用于构建富互联网应用程序(RIA),特别是在基于 Adobe Flash Player 或 Adobe AIR 的平台上。Flex Chart 是 Flex SDK ...

    Flex chart line 线性表(单线和双线)

    Flex Chart Line是Adobe Flex框架中的一个关键组件,用于创建数据可视化图表,特别是线性图表。在本场景中,我们关注的是“单线”和“双线”两种类型的线性图表。Flex 4.5是Adobe Flex SDK的一个版本,它提供了更...

    FlexChart平均线代码

    FlexChart是Adobe Flex框架中的一个图表组件,用于创建各种数据可视化图表。在描述中提到的“FlexChart平均线代码”是指使用FlexChart来绘制平均线图表的源代码。这个平均线可能指的是移动平均线,一种在金融数据...

    flex 改变linechart datatips 显示样式代码

    在Flex开发中,LineChart是一种常用的图表组件,用于展示数据趋势。Datatips是LineChart中的一个重要特性,它会在鼠标悬停在数据点上时显示相关信息。本篇将详细介绍如何改变Flex LineChart的Datatips显示样式,包括...

    去除flex chart 水印方法

    在使用Flex Builder创建图表(Chart)的过程中,很多开发者会遇到一个普遍的问题:如何有效地去除试用版中的水印。Flex Builder作为Adobe推出的一款功能强大的开发工具,被广泛应用于创建富互联网应用(RIA)。然而,...

    Flex Chart+WebService

    标题中的“Flex Chart+WebService”指的是使用Adobe Flex技术来创建图表,并通过Web Service与服务器进行数据交互的一个示例项目。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它...

    FlexChart使用教程

    FlexChart不仅提供了丰富的图表类型,还支持高度定制化的样式设置,使得开发者能够轻松地创建出美观且交互性强的图表应用。无论是用于数据分析还是数据可视化,FlexChart都是一个值得推荐的选择。

    Flex自定义生成图表源码.rar

    3. **事件处理**:为了增加交互性,源码可能包含了事件监听器,例如点击图表元素后触发某些动作,或者通过鼠标悬停显示更多数据信息。 4. **样式和主题**:Flex允许开发者自定义组件的外观。源码可能展示了如何使用...

    Delphi生成Chart柱状图表控件附效果演示.rar

    Delphi7.0源码生成一个柱状图表chart,使用了ntdll.dll,这个直方图表效果如图所示。使用了第三方控件实现的图表制作生成软件,功能比较强大。以下是图表测试源代码:  Chart := TChart.Create(nil);  try  Chart...

    flex柱状图表很漂亮的源码

    2. **Chart组件**:在Flex中,使用`mx.charts.Chart`(Halo)或`s.spark.components.Chart`(Spark)作为图表容器。你可以设置其属性,如背景颜色、标题、图例等。 3. **Series**:柱状图通常由一个或多个Series...

    Flex Chart Demo

    Flex Chart Demo是一个示例项目,展示了如何在Flex环境中利用图表组件进行数据可视化。Flex是Adobe开发的一款用于构建富互联网应用程序(RIA)的框架,而Flex Builder是它的集成开发环境(IDE),提供了图形化的用户...

    flex 4 chart 控件

    - Flex 4的Chart控件提供了丰富的样式和主题选项,可以自定义颜色、线条样式、填充效果等,以满足设计需求。 - 用户还可以定制图表的轴、网格线、图例、标题等元素的样式。 4. **交互性**: - 图表支持用户交互...

    flex+java制作图表以及登陆案例

    本人这段时间在学习flex 自己写的一些成功案例 包括lineChart BarChart bubbleChart pieChart等图表.这些图表都能显示从java后台传入的数据 保证可以运行 好资源所以分数有点高,望大家鼎力支持.

    flex chart explorer

    Flex Chart Explorer是一个基于Adobe Flex技术的图表探索工具,它提供了丰富的可视化能力,帮助开发者和数据分析师创建和定制各种图表类型,如线图、柱状图、饼图等。Flex是Adobe开发的一种开源框架,用于构建富...

    Flex_4系统组件:图表

    标题中的“Flex_4系统组件:图表”指的是Adobe Flex 4框架中用于创建数据可视化的图表组件。这些组件是Flex SDK的一部分,允许开发者构建交互式的、动态的数据展示应用。Flex 4引入了全新的图形渲染引擎(称为Spark...

    flex 指南 Flex入门 Flex实例 flex图表 flex与java flex中文帮助 flex培训

    chart.rar--java+flex图表 Flex3高级图表开发指南.pdf--英文的 Flex+白皮书.pdf flex-demo.rar Flex入门培训资料及PPT.rar flex中文帮助.pdf InfoQ Flex与JSON及XML的互操作.mht 结合java做的flex图表例子 - 点点...

    flex做的四种图表(线、柱、饼、区域)直接用js调用

    在Flex中,可以使用mx.charts.LineChart类来创建线图,通过设置series属性添加数据系列,利用dataProvider绑定数据源,还可以自定义轴刻度、图例、颜色等视觉元素。 柱状图则常用于比较不同类别的数据量。Flex中的...

Global site tag (gtag.js) - Google Analytics