flex3d柱状图

    这几天要做flex chart,看她们做的3d图很是漂亮,自己也做了个简单3d的拼图~

简单介绍下它的画法:首先确定一个起始点,然后开始 画柱体的上面部分,再画画柱体的前面,侧面,

 当然了,画面的顺序你自己可以定,先画那个面都可以。

先放个效果图出来看看:

 

代码如下:首先是自定义的as组件(这里主要贴画法的部分):

// 画柱体的上面部分
			matrix.createGradientBox(wi, xx, (270/180)*Math.PI, ox, oy);
			g.beginGradientFill("linear",colors,alphas,ratios,matrix);
			graphics.moveTo(ox,oy); 
		    graphics.lineTo(ox+wi,oy);
		    graphics.lineTo(ox+wi-xx,oy+xx);
		    graphics.lineTo(ox-xx,oy+xx);
		    graphics.endFill();
	      // 画柱体的前面,
		 	colors = [lighter,fillColor];
			alphas = [1,1];
			ratios = [0,127];
			matrix.createGradientBox(wi, he, Math.PI/2, ox-xx, oy+xx);
			g.beginGradientFill("linear",colors,alphas,ratios,matrix);
		    g.drawRect(ox-xx,oy+xx,wi,he);
		    g.endFill();
		   //画右侧面
		   colors = [fillColor,lighter];
			alphas = [0.7,0.7];
			ratios = [0,255];
		    matrix.createGradientBox(xx, he+xx, (270/180)*Math.PI, ox+wi-xx, oy+xx);
			g.beginGradientFill("linear",colors,alphas,ratios,matrix);
		    g.moveTo(ox+wi-xx,oy+xx);
		    g.lineTo(ox+wi,oy);
		    g.lineTo(ox+wi,oy+he-xx);
		    g.lineTo(ox+wi-xx,oy+he+xx);
		    g.endFill();

说明一下, g.beginGradientFill("linear",colors,alphas,ratios,matrix);是线性变化填充,g.beginFill()代替

 

下面是mxml页面代码(主要):

<mx:Panel id="panel"   verticalCenter="true" horizontalAlign="true" title="自定义3d柱状图"
		 width="80%" height="90%" alpha="1"  paddingBottom="0" 
		 paddingLeft="0"  paddingTop="0" paddingRight="0">
		
	<mx:ColumnChart id="cs" width="70%" height="80%">
	<mx:horizontalAxis>
		<mx:CategoryAxis  id="haxis" categoryField="@name"/>
	</mx:horizontalAxis>
		<mx:series>
			<mx:ColumnSeries maxWidth="20" yField="undo"  maxColumnWidth="25" displayName="@name"
								>
								<mx:itemRenderer>
									<mx:Component>
									<local:RollOverBoxItemRenderer color="#8888E0" downColor="#8888E0" overColor="#8888E0"/>
									</mx:Component>
								</mx:itemRenderer


>
							</mx:ColumnSeries>
		</mx:series>
	</mx:ColumnChart>

  注意:红色的部分

源文件如下:

 

你可能感兴趣的:(Flex)