Центрирование DataTip (цель) на ColumnChart в Flex 3 - PullRequest
0 голосов
/ 29 октября 2010

Как я могу выровнять подсказку к вертикальному центру соответствующего столбца? Я попытался создать собственный dataTipRenderer, но мне кажется, что там я могу только перемещать подсказку данных относительно цели (круговой рисунок). Но с этой позицией все в порядке, я бы хотел переместить саму цель.

Моя последняя идея - установить стиль диаграммы showDataTipTargets в false и нарисовать цели в пользовательском dataTipRenderer. Я считаю это грязным хаком, поэтому, если есть что-то более дружелюбное, я бы согласился. Кроме того, в этом случае, как я могу указать координаты центра столбца в функции updateDisplayList средства визуализации всплывающих подсказок?

1 Ответ

1 голос
/ 22 февраля 2011

Надеюсь, этот фрагмент кода поможет ... package As {import flash.display. *;импорт 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
        }
}

} Ура!:)

...