2012-01-16 33 views
1

我使用LogAxis在Flex中创建了折线图。 Flex在与Log轴的主要刻度线相同的位置绘制小刻度线,所以我需要手动绘制次刻度线标记。我尝试使用mxml中的backgroundElements中的CartesianDataCanvas,然后使用ActionScript在数据画布上使用moveTo(x1,y1)和lineTo(x2,y2)绘制线条, ,它在(x1,y1)和(x2,y2)之间画出一条直线。Flex:如何使用屏幕坐标在图表上绘制线段?

上述方法的问题是刻度标记长度是图表区域(取决于浏览器窗口大小)的函数。

我需要的是一个方法:

(1)在数据开始坐标(如的moveTo(X1,Y1)工作正常,这一点)

(2)画线到屏幕坐标(例如,lineTo(x_screen,y_screen),其中x_screen和y_screen是屏幕坐标)。

在Flex/AS3中有什么可以做到的?

或者,我可以使用上述两个步骤的屏幕坐标吗?如果是这样,如何在屏幕和数据坐标之间进行转换?例如,屏幕的右上角总是固定的数据坐标,我可以参考创建这样一个转换?

或者,我可以在Illustrator中保存一个五行像素的行,并将该图像以某种方式粘贴到图表中?如果是这样,如何将其精确粘贴到数据坐标?

任何想法或意见非常赞赏。

回答

1

我建议你创建自定义轴渲染器。扩展AxisRenderer类,覆盖updateDisplayList方法。由于所有负责渲染轴的方法都是private,只需将它们复制到您的班级并对drawTicks方法进行必要的更改即可。但是你需要花一些时间来理解渲染逻辑。

然后将您的渲染器应用到您的图表。

<mx:LineChart> 
    <mx:horizontalAxisRenderers> 
     <custom:CustomAxisRenderer/> 
    </mx:horizontalAxisRenderers> 
</mx:LineChart> 
+0

非常感谢Timofei,我了解到有函数localToData和dataToLocal,并设法使用它们进行数据坐标转换。但是,男孩,在画布上绘制刻度时,图表渲染速度很慢!不确定您提出的解决方案是否会加快速度,但我不知道我是否能够深入了解Flex代码。 – ggkmath 2012-01-16 22:18:46