Рисование нескольких линий на одном графике в flex 4.5 - PullRequest
0 голосов
/ 03 марта 2012

У меня есть CandleStickChart в flex 4.5 с горизонтальной осью dateTimeAxis.
Я хочу иметь кнопку, позволяющую нарисовать линию поверх графика.
Я написал код, который каждый раз, когда кнопкащелкните, будет создан новый CartesianDataCanvas.чем я делаю довольно стандартное рисование линий, слушая MOUSE_DOWN, MOUSE_MOVE и MOUSE_UP для рисования линии.
В событии MOUSE_DOWN я создаю новый CartesianDataCanvas и обновляю annotaionArray, как описано в следующем коде:the CandleStickChart id)

public function startDrawing(event:MouseEvent):void
{
    canvas = new CartesianDataCanvas;
    annotationArray.addItem(canvas);
    candles.annotationElements = annotationArray.toArray();         
    x1 = this.mouseX;
    y1 = this.mouseY;   
    addEventListener(MouseEvent.MOUSE_MOVE, updateLine);
    addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
}   

Все отлично работает в первой строке, которую я рисую.
Проблема в том, что при рисовании второй линии первая линия исчезает.Когда я отлаживаю массив annotationArray, я вижу, что он действительно состоит из двух объектов CartesianDataCanvas и для некоторого восстановления показывает только последний объект.

Кто-нибудь знает, как я могу это исправить, чтобы показать все CartesianDataCanvas в массиве сразу?Я довольно новичок, чтобы сгибать, поэтому я определенно мог пропустить некоторые основные вещи здесь.не стесняйтесь комментировать основы тоже.

Заранее спасибо Равид

1 Ответ

0 голосов
/ 10 марта 2012

Разобрался с проблемой.Мне нужно было создать новый класс, производный от cartesianCanvas, и переопределить его функцию «updateDisplayList», чтобы перерисовать строку

override protected function updateDisplayList( unscaledWidth:Number, unscaledHeight:Number ):void
{
    super.updateDisplayList( unscaledWidth, unscaledHeight );       
    drawLine();
}
...