在Flex 3中的ColumnChart上居中DataTip(目标)

时间:2010-10-29 00:10:07

标签: flex3 charts

如何将DataTip与相应列的垂直中心对齐?我已经尝试创建自定义dataTipRenderer,但在我看来,我只能相对于目标(圆形图形)移动数据提示。但那个位置很好,我想移动目标本身。

我的最后一个想法是将图表的showDataTipTargets样式设置为false,并在自定义dataTipRenderer中绘制目标。我认为这是一个肮脏的黑客,所以如果有任何更友好的我会去那。另外,在这种情况下,如何判断datatip渲染器的updateDisplayList函数中的列中心坐标?

1 个答案:

答案 0 :(得分: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
        }
}

} 干杯!! :)