2010-10-29 65 views
0

如何將數據提示對齊到相應列的垂直中心?我試着創建一個自定義的dataTipRenderer,但在我看來,我只能移動相對於目標(圓形圖形)的數據提示。但那個位置很好,我想移動目標本身。在Flex 3的ColumnChart中居中對齊數據提示(目標)

我最後的想法是將圖表的showDataTipTargets樣式設置爲false,並在自定義dataTipRenderer中繪製目標。我認爲這是一個骯髒的黑客攻擊,所以如果有什麼更友好的話,我會去做。另外,在這種情況下,我怎麼能告訴datatip渲染器的updateDisplayList函數中的列中心座標?

回答

1

希望這段代碼將有助於... 包作爲 { import flash.display。*; import flash.geom.Point;

import mx.charts.*; 
import mx.charts.chartClasses.DataTip; 
import mx.charts.series.ColumnSeries; 
import mx.charts.series.items.ColumnSeriesItem; 
public class MyDataTip extends DataTip 
{ 
    private var _xBaseLine:int=0; 
    private var _yBaseLine:int=0; 
    private var myX = 0 
    private var myY = 0 
    public function MyDataTip() 
    { 
    super(); 
    } 
    override public function set data(arg1:Object):void { 
     var sMessage:String; 
     var pt:Point; 
     var hitData:HitData = mx.charts.HitData(arg1); 
     var chartItem = ColumnSeriesItem(hitData.chartItem); 
     var renderer = chartItem.itemRenderer; 
     var series = ColumnSeries(hitData.element); 

     var colName = chartItem.element.name 
     var pft = chartItem.xValue  


     if(renderer != null) { 
      myX = (renderer.width/2) 
      myY = (renderer.height/ 2) + (this.height) 
     } 
     super.data=arg1; 
    } 
    override public function move (x:Number, y:Number):void { 
     // Adjusted 
     var pointAdjusted:Point = new Point(x + _xBaseLine, y + _yBaseLine); 
     // Call the parent 
     super.move(pointAdjusted.x, pointAdjusted.y); 
    } 
    override protected function updateDisplayList(w:Number, h:Number):void 
    { 
     super.updateDisplayList(w, h); 

     this.x = this.x + myX - 15 
     this.y = this.y + myY - 7 
     } 
} 

} 乾杯! :)

+0

感謝Prabby,但它看起來只會改變數據提示本身。正如我上面提到的,我需要將數據提示目標(圓圈中的點)一起移動。實際上,目標應該超過列的中心,數據提示應該從通常情況下的任何一方接觸它。 – Marcell 2011-03-16 23:26:17