柱状图

  Main application file:
  flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  minWidth="955"
  minHeight="600"
  xmlns:component="com.component.*"
  pageTitle="2008北京奥运会奖牌" viewSourceURL="srcview/index.html">
  
  
  
  
  
  
  
  
  
  -->
  
  chart:
  /*************************************************
  ****
  **** 黄记新,2010-10-14,下午04:58:40
  ****
  ************************************************/
  // .==. .==.
  // //`^\\ //^`\\
  // // ^ ^\\ //^ ^^\\
  // //^ ^^ ^\(\__/)/^ ^^ \\
  // //^ ^^ ^^ /6 6\ ^ ^^ ^\\
  // //^ ^^ ^^ /( .. )\^ ^ ^ ^\\
  // // ^^ ^^ /\| V""V |/\^ ^ ^ \\
  // // ^^ ^/\/ / `~~` \ \/\^ ^ \\
  package com.component
  {
  import flash.display.Graphics;
  import flash.events.Event;
  import flash.events.MouseEvent;
  import flash.filters.BevelFilter;
  import flash.filters.DropShadowFilter;
  import flash.utils.Dictionary;
  import mx.core.IFactory;
  import mx.core.UIComponent;
  import spark.components.Group;
  import spark.components.Label;
  public class ColumnChart extends Group
  {
  //数据源
  [Bindable]
  private var _dataProvider:Object;
  protected var dataProviderChanged:Boolean;
  //渲染器
  private var _itemRenderer:IFactory;
  //滤镜
  private var dropShadowFilter:DropShadowFilter=new DropShadowFilter();
  private var bevelFilter:BevelFilter=new BevelFilter();
  private var itemToRender:Dictionary;
  private var renderToItem:Dictionary;
  private var objectsArray:Array=[];
  private var colorArray:Array=[];
  private var labelArray:Array=[];
  private var _verticalTotalValue:Number;
  //滤镜
  private var dropShadowFil:DropShadowFilter=new DropShadowFilter();
  private var lineContainer:Group;
  private var lineColor:uint=Math.random()*0xffffff;
  public function ColumnChart()
  {
  //TODO: implement function
  super();
  itemToRender=new Dictionary(true);
  renderToItem=new Dictionary(true);
  this.filters=[dropShadowFil];
  addEventListener(MouseEvent.ROLL_OVER, onRollOver);
  addEventListener(MouseEvent.ROLL_OUT, onRollOut);
  }
  public function get verticalTotalValue():Number
  {
  return _verticalTotalValue;
  }
  public function set verticalTotalValue(value:Number):void
  {
  _verticalTotalValue=value;
  }
  /*************************************************
  ****
  **** setter和 getter函数
  ****
  ************************************************/
  public function get itemRenderer():IFactory
  {
  return _itemRenderer;
  }
  public function set itemRenderer(value:IFactory):void
  {
  _itemRenderer=value;
  }
  public function get dataProvider():Object
  {
  return _dataProvider;
  }
  public function set dataProvider(value:Object):void
  {
  /*if (_dataProvider == value)
  {
  return;
  }*/
  _dataProvider=value;
  dataProviderChanged=true;
  invalidateProperties();
  }
  /**
  * 创建实例
  * @param object
  * @return
  */
  protected function createItemInstance(object:Object):UIComponent
  {
  var render:UIComponent=itemRenderer.newInstance() as UIComponent;
  if (render is IColumnItemRender)
  {
  IColumnItemRender(render).data=object;
  }
  return render;
  }
  /**
  * 移除实例;
  * @param object
  */
  protected function removeItemInstance(object:Object):void
  {
  var render:UIComponent=itemToRender[object] as UIComponent;
  if (render && this.contains(render))
  {
  this.removeElement(render);
  itemToRender[object]=null;
  renderToItem[render]=null;
  }
  }
  /**
  * 移除所有实例;
  * @param array
  */
  protected function removeAllItem(array:Array):void
  {
  if (array.length == 0)
  return;
  for (var i:int=0; i array[i]);
  }
  for (var j:int=0; j array:Array, p:*, value:*):void
  {
  if (array.length == 0)
  return;
  for (var i:int=0; i array[i]);
  if (render && render.hasOwnProperty(p))
  {
  render[p]=value;
  }
  // ISectorItemRender(render).sRadius=value;
  }
  }
  /**
  * 创建柱状;
  * @param dataProvider
  */
  protected function createColumnChart(dataProvider:Object):void
  {
  if (dataProvider is XML)
  {
  var arrCol:XML=dataProvider as XML;
  var len:int=arrCol.children().length();
  var totalValueHeight:Number=height / verticalTotalValue;
  trace(totalValueHeight);
  var aveHeigh:Number=verticalTotalValue / 20;
  //对一个孩子产生随机颜色
  generateColor(colorArray, arrCol.children()[0]);
  for (var j:int=0; j Array, xml:XML):void
  {
  for each (var tempXml:XML in xml.children())
  {
  var color:uint=Math.random() * 0xffffff;
  colorArr.push(color);
  }
  }
  protected function setColorAttribute(color:uint, xml:XML):void
  {
  xml.@color=color;
  }
  /*************************************************
  ****
  **** 覆盖函数
  ****
  ************************************************/
  override protected function commitProperties():void
  {
  super.commitProperties();
  if (dataProviderChanged)
  {
  dataProviderChanged=false;
  removeAllItem(objectsArray);
  createColumnChart(dataProvider);
  }
  if (!lineContainer)
  {
  lineContainer=new Group();
  lineContainer.percentHeight=lineContainer.percentW idth=100;
  addElementAt(lineContainer, this.numElements);
  }
  }
  private function onRollOut(event:MouseEvent):void
  {
  lineContainer.graphics.clear();
  lineContainer.removeEventListener(Event.ENTER_FRAM E, onEnterFrame);
  }
  private function onRollOver(event:MouseEvent):void
  {
  lineContainer.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  }
  private function onEnterFrame(event:Event):void
  {
  drawMouseLine(lineContainer.graphics, event);
  }
  private function drawMouseLine(g:Graphics, event:Event):void
  {
  g.clear();
  g.lineStyle(2,lineColor);
  g.moveTo(0, Group(event.currentTarget).mouseY);
  g.lineTo(Group(event.currentTarget).width, Group(event.currentTarget).mouseY);
  /*g.moveTo(Group(event.currentTarget).mouseX, height);
  g.lineTo(Group(event.currentTarget).mouseX, 0);*/
  }
  /**
  * 响应条目项点击
  * @param event
  */
  private function onClick(event:MouseEvent):void
  {
  var render:UIComponent=event.currentTarget as UIComponent;
  var object:Object=getItem(event.currentTarget as UIComponent);
  if (!object)
  {
  return;
  }
  //派发条目点击事件
  object.render=event.currentTarget as UIComponent;
  dispatchEvent(new ColumnChartEvent(ColumnChartEvent.ITEM_CLICK, object));
  }
  private function getItem(render:UIComponent):Object
  {
  return renderToItem[render] as Object;
  }
  private function getRender(object:Object):UIComponent
  {
  return itemToRender[object] as UIComponent;
  }
  override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
  {
  super.updateDisplayList(unscaledWidth, unscaledHeight);
  var totalValueHeight:Number=height / verticalTotalValue;
  var averageHeigh:Number=verticalTotalValue / 10;
  this.graphics.lineStyle(1, 0x123456);
  this.graphics.moveTo(-5, height);
  this.graphics.lineTo(-5, height - verticalTotalValue * totalValueHeight);
  /*this.graphics.moveTo(-5, height+1);
  this.graphics.lineTo(width, height+1);*/
  for (var i:int=0; i
  
  flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  autoDrawBackground="false"
  implements="com.component.IColumnItemRender">
  
  Array=[];
  private var labelDataArray:Array=[];
  private var xml:XML;
  [Bindable]
  override public function get data():Object
  {
  return _data;
  }
  override public function set data(value:Object):void
  {
  if (_data == value)
  {
  return;
  }
  _data=value;
  dataChanged=true;
  invalidateProperties();
  }
  override protected function commitProperties():void
  {
  super.commitProperties();
  if (dataChanged)
  {
  dataChanged=false;
  this.width=data.width;
  this.height=data.height;
  xml=data.xml;
  for (var i:int=0; i
  
  
  
  /*************************************************
  ****
  **** 黄记新,2010-10-12,下午04:33:13
  ****
  ************************************************/
  package com.component
  {
  public interface IColumnItemRender
  {
  function get data():Object;
  function set data(object:Object):void;
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值