动态曲线图的flex实现说明.doc

  Author: Allan(吴进刚)
  其实现在回想起来很简单 无非就是用到了 flex 的 mx:LineChart组件,下面详细的说明下该组件下面是如何实现x轴,y轴的 刻度显示 曲线的实现,数据绑定等等。。
  首先看如下代码:
  width="50%"
  paddingRight="5" paddingLeft="5"
  showDataTips="true" seriesFilters="[]" selectionMode="multiple" doubleClickEnabled="true"
  change="onZoom(event)"
  chartDoubleClick="onReset(event)" >
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  mx:LineChart : 用来构造整个曲线图;
  showDataTips="true":show details of data point
  selectionMode="multiple":选择多个数据点,可以是0个或者1个
  doubleClickEnabled="true":是否允许双击chart
  change="onZoom(event)":Dispatched when the selection changes in the chart
  chartDoubleClick="onReset(event)":
  mx:horizontalAxis:用来定义X轴;
  mx:DateTimeAxis:时间轴;
  dataUnits="seconds":milliseconds seconds minutes hours days weeks months years
  interval="5":间隔时间
  minimum="{minDate}":起始时间,绑定到 minDate
  maximum="{maxDate}":结束时间,绑定到 maxDate
  labelFunction="mylabel":x轴显示的值,有函数 mylabel 返回
  alignLabelsToUnits="false":使x轴不标值点从0开始
  mx:horizontalAxisRenderers:定义一组渲染X轴的特效;
  mx:AxisRenderer:定义特效的;
  axis="{hAxis}"
  mx:verticalAxis:用来定义Y轴;
  mx:verticalAxisRenderers:定义一组渲染Y轴的特效;
  mx:series:定义一组LineSeries 也就是曲线或者点。。;
  mx:LineSeries:定义要展现的数据曲线,可以定义多条曲线;
  yField="valueTest":绑定的数据源中的key为valueTest的值
  xField="date":绑定的数据源中的key为date的值
  dataProvider="{[b]this[/b].testDatas}":绑定数据testDatas
  form="curve":趋势图显示为曲线,可以为horizontal vertical 等等 默认为segment
  再来看Action Script 代码:
  
  maxDate.getTime()) {
  maxDate = dateVar;
  [b]var[/b] dx:Date = [b]new[/b]
  Date();
  dx.setMinutes(dx.getMinutes()-1, dx.getSeconds(), dx.getMilliseconds());
  minDate = dx;
  }
  testDatas.addItem({date: dateVar, valueTest: valueTestValue});
  }
  [b]import[/b] mx.managers.PopUpManager;
  [b]import[/b] test.GraphTest1SelectTime;
  [b]private[/b] [b]function[/b] showAlertWindow():[b]void[/b]{
  [b]var[/b] myPanel:GraphTest1SelectTime = GraphTest1SelectTime(PopUpManager.createPopUp([b]this[/b], GraphTest1SelectTime, [b]true[/b])); // 这里第三个参数 true 表示: 弹出myPanel窗口后, 是否可以对父级操作, 值为true时, 就会产生背景模糊的效果, 并不能对父级的东西进行操作
  myPanel.x = 420;
  myPanel.y = 170;
  }
  [b]private[/b] [b]var[/b] canReset:Boolean = [b]false[/b]
  ;
  //放大选择的焦点区域的函数
  [b]private[/b] [b]function[/b] onZoom(event:ChartItemEvent):[b]void [/b]
  {
  [b]var[/b] lc:LineChart = event.target [b]as[/b] LineChart;
  [b]for each[/b] ([b]var[/b] ls:LineSeries [b]in[/b] lc.series)
  {
  [b]var[/b] ac:ArrayCollection = [b]new[/b] ArrayCollection();
  [b]var[/b] dp:ArrayCollection = ls.dataProvider [b]as[/b] ArrayCollection;
  [b]for each[/b] ([b]var[/b] lsi:LineSeriesItem [b]in[/b] ls.selectedItems)
  {
  ac.addItem(lsi.item);
  }
  ls.dataProvider = ac;
  }
  lc.clearSelection(); canReset = [b]true[/b]; } //only need reset after zoom [b]private[/b] [b]function[/b] onReset(event:ChartEvent):[b]void [/b]{ [b]if[/b](canReset) { [b]var[/b] lc:LineChart = event.target [b]as[/b] LineChart; [b]for[/b] ([b]var[/b] i:int = 0; i 这里面定义了绑定的数据对象,和 被调用的函数,可以自行去查看,有说明备注。
  最后说明如何利用blazeds与 Java server 通信,实时展现后台的数据曲线图:
  请看代码:
  
  
  
  
  
  
  
   -->
  
  
  
  
  
  mx:ChannelSet:定义一组频道;
  mx:AMFChannel:定义一个频道;
  mx:RemoteObject:定义一个远程对象;
  destination="graphTest1FeedStarter":选定一个server定义的对象;
  channelSet="{cs}":选定一个频道;
  mx:Consumer:订阅目标来接收消息;
  destination="graphTest1-feed":选定一个server定义的对象;
  channelSet="{cs2}":选定一个频道;
  message="messageHandler(event.message)":接收到消息时分派;
  下面是分派消息的函数:为曲线图绑定的数据源testDatas提供实时数据取代上面用Timer订阅数据;
  [b]import[/b] mx.messaging.messages.IMessage;
  [b]private[/b] [b]function[/b] messageHandler(message:IMessage):[b]void[/b] {
  [b]var[/b] dm:Date = [b]new[/b]
  Date();
  dm.setTime(dateVar.getTime());
  dm.setSeconds(dm.getSeconds()+1, dm.getMilliseconds());
  dateVar = dm;
  [b]if[/b] (dateVar.getTime()>maxDate.getTime()) {
  maxDate = dateVar;
  [b]var[/b] dx:Date = [b]new[/b]
  Date();
  dx.setMinutes(dx.getMinutes()-1, dx.getSeconds(), dx.getMilliseconds());
  minDate = dx;
  }
  testDatas.addItem({date: dateVar, valueTest: message.body});
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值