2012-09-19 32 views
0

我使用Flex 4.5。 在我的應用程序中,我有一個帶有基本燭臺系列的CandlestickChart。 我給用戶添加一個供LineSeries的K線,以增加對candlesChart頂部的線型圖的能力,如Adobe的文檔這裏解釋:hereCandlestickSeries Line系列使蠟燭變得更窄

我的問題是,當添加行它改變的形狀蠟燭要窄一些。而且,每增加一行,都會使蠟燭變窄。

我環顧四周,在adobe的論壇中發現了這個主題:"CandlestickChart problem with LineSeries"它描述了完全相同的問題。

不幸的是,該線程仍然沒有回答。

有沒有人知道這個問題的解決方案?

由於提前, Ravid

回答

0

嗯,我找到了解決辦法是不是很好,更好的解決方案,仍然表示讚賞,但對於那些你有這個解決方案爲我同樣的問題:

的問題發生是因爲蠟燭的默認項目渲染器使用項目的寬度來計算蠟燭的大小,這是有意義的。 問題是,當您添加另一個系列時,會出現一個錯誤,並且該項目的寬度發生變化,因此蠟燭被更改。

我的解決方案是創建默認項目渲染器的副本,並根據圖形的寬度和蠟燭數量來放置蠟燭(因此您不使用項目的寬度)。

它修復了這個問題,但是如果使用工具提示功能的話,它會比它的相對於蠟燭的位置混亂。

0

我知道這個答案有點晚,但萬一它幫助其他人,這就是我所做的。 (這不是徹底的測試,要麼)

作出這樣的擴展K線類的類,只是重寫「applySeriesSet」功能如此:

override protected function applySeriesSet(seriesSet:Array /* of Series */, 
               transform:DataTransform):Array /* of Series */ 
    { 
     // filter out the non-candlestick series 
     var filteredSeriesSet:Array = new Array(); 
     for each(var series:Series in seriesSet){ 
      if(series is CandlestickSeries) filteredSeriesSet.push(series); 
     } 

     // call the CandlestickChart applySeriesSet function with the filtered set, ignore return value 
     super.applySeriesSet(filteredSeriesSet, transform); 

     // do the code that the CartesianChart applySeriesSet function would have done, but with the unfiltered seriesSet 
     // would have preferred to do something like super.super.applySeriesSet(seriesSet, transform); 
     var n:int = seriesSet.length; 
     for (var i:int = 0; i < n; i++) 
     { 
      var newSeries:IChartElement = seriesSet[i]; 
      if (newSeries is Series) 
       customizeSeries(Series(seriesSet[i]), i); 
     } 
     return seriesSet; 
    } 
相關問題