2012-01-16 37 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