как динамически изменить цвет фрагмента mx - PullRequest
0 голосов
/ 16 февраля 2011

Я создаю программу, в которой изменение значения вызывает динамическое изменение цвета фрагмента круговой диаграммы в mx: PieChart.

код, который должен изменить цвет, похож на этот:

(pieChart.pieChartSeries.items[i] as PieSeriesItem).fill  = new mx.graphics.SolidColor(0,0.2); // black, almost opaque

По результатам этого можно применить цвет к конкретному элементу PieSeriesItem, но цвет не изменяется визуально. Я проверил ссылку на AS, и свойство fill имеет тип iFill и должно принимать экземпляр solidColor. (примечание: я также пробовал 0x000000 в качестве допустимого цвета, первый аргумент SolidColor принимает значение uint)

Есть мысли о том, почему цвет не будет применен? комментарии приветствуются.

[править] С тех пор как я опубликовал вопрос, я добавил несколько изменений, чтобы прояснить вопрос.

  1. Я на самом деле использую компонент MXML, который расширяет . Первоначально я пытался установить цвет, как указано выше, в обработчике событий в основном приложении. С тех пор я выполнил вызов метода в моем расширенном компоненте PieChart, например:

(в основном приложении)

private function someEventHandler(evt:someEvent):void{
    pieChart.setPieSliceColor((pieChart.pieChartSeries.items[i] as PieSeriesItem));

}
  1. В пользовательском круговом компоненте определен следующий метод:

    открытый наборPieSliceColor (элемент: PieSeiesItem): void { item.fill = new mx.graphics.SolidColor (0x0000ff, 1); this.invalidateSeriesStyles ();

    }

теперь изменение цвета действительно происходит, но не видно, пока пользователь не наведет указатель мыши на соответствующего кусочка пирога! Странно.

Любые дополнительные комментарии приветствуются.

еще раз спасибо

Эдвард

Ответы [ 2 ]

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

Я понял ...

что-то вроде этого будет работать.

        public function setPieSliceColor(item:PieSeriesItem):void{
            item.fill = new mx.graphics.SolidColor(0x0000ff,1);
            this.setFocus();
            this.invalidateSeriesStyles();
                             // note this line
            item.currentState = "rollOver";
        }   

Похоже, что, хотя я менял цвет, цвет не будет действовать, пока я не наведу курсор мышиslice ... Таким образом, установка currentState среза (или элемента), кажется, делает свое дело.

0 голосов
/ 16 февраля 2011

Это кажется правильным, но я думаю, вам нужно перерисовать элемент управления после установки этого свойства. Вы пытались вызвать методы invalidateDisplayList и / или invalidateProperties на диаграмме?

Для этого вы также можете использовать функцию заполнения в серии.

...