DateTimeAxis高级应用

DateTimeAxis可检查轴的最小值和最大值之间的范围,以此选择最合理的单位用于标记轴。但对于以分钟为数据单位的图表,往往会出现许多问题,本文将以一个实例来谈谈解决之法。

问题一: 显示无效的日期。点击查看

原因:打开stock.xml,可以看到该文件中仅包含每天上午9点到下午3点之间的历史数据,而且有两天还是工作日。DateTimeAxis不会筛选禁用的数据,仅显示与图表中有用的数据。

解决办法:使用disabledDays和disabledRanges属性每周中禁用的天数以及禁用的日期范围。如下面代码:

disabledDays = [0, 6];

override public function get disabledRanges():Array
{
	var diff:int = new Date(maximum.getTime() - minimum.getTime()).date;
	
	var arr:Array = new Array();
	
	if(dataUnits == "minutes" || dataUnits == "hours")
	{
		for(var i:int = 0; i < diff; i++)
		{		
			var startDate:Date = new Date(minimum.fullYear, 
				minimum.month, minimum.date + (i), 15, 0);
			var endDate:Date = new Date(minimum.fullYear, 
				minimum.month, minimum.date + (i + 1), 9, 0);
			var range:DateRange = new DateRange( startDate, endDate);
			arr.push(range);
		}
	}
		
	else
	{
		arr = super.disabledRanges;
	}

	return arr;	
}

实际上,变量diff的值一般不会超过5,因此我们可以取date属性而不用除以24*60*60*1000。

注意:如果是用Flex SDK 3.3以下的SDK来编译,图表会向左偏移,这是Flex SDK的一个Bug。详见http://bugs.adobe.com/jira/browse/FLEXDMV-963

问题二: 日期轴标签全部都是以小时为单位,无醒目间隔。点击查看

原因:日期轴标签使用了自动计算的日期格式,且不是LocalTime,因此我们之前设定displayLocalTime="true"。

解决办法:设定labelFunction()或覆写formatDays()、formatMinutes()等方法。如下面代码。

override protected function formatDays(d:Date, previousValue:Date, axis:DateTimeAxis) : String
{
	var df:DateFormatter = new DateFormatter();
	df.formatString="MMM D";
	return df.format(d);
}

override protected function formatMinutes(d:Date, previousValue:Date, axis:DateTimeAxis) : String
{
	var df:DateFormatter = new DateFormatter();
	df.formatString="L A";
	var dt:Date = new Date(labelMinimum);
	var h:Number = dt.hours;
	
	if(dt.minutes > 0 || dt.seconds > 0)
	{
		h += 1;
	}
	
	if(d.hours == h)
	{
		return formatDays(d, previousValue, axis)
	}
	return df.format(d);
}

在formatMinutes()方法中,我们使用了一点小技巧让每天的第一个日期轴标签以天为单位显示。

点击此处查看该实例最终效果,点击此处下载该实例的源码。

上一篇上一篇: 使用Flash Builder 4进行Unit Test
下一篇下一篇: Flash Builder 4正式版发布
来自文章来自: 本站原创
引用引用通告: 查看所有引用 | 我要引用此文章
标签Tags: Chart
相关相关日志:
评论: 7 | 引用: 0 | 查看次数: -
引用majuan[2011-03-28 09:57 AM | 无网站 | 无Mail | 58.56.108.35 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
引用majuan[2011-03-25 01:07 PM | 无网站 | 无Mail | 58.56.108.35 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
引用kinglo[2010-12-22 09:29 AM | 无网站 | 无Mail | 218.80.220.74 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
引用Flying[2010-12-14 01:05 PM | 无网站 | 无Mail | 61.144.230.200 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
引用kinglo[2010-12-13 05:35 PM | 无网站 | 无Mail | 218.80.220.74 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭