如何动态更改mx:PieSeriesItem切片的颜色

时间:2011-02-15 23:29:04

标签: flex actionscript adobe charts mxml

我正在创建一个程序,其中值的更改会导致mx:PieChart中的饼图切片的颜色动态更改。

应该更改颜色的代码与此类似:

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

追踪结果似乎将颜色应用于特定的PieSeriesItem,但颜色不会在视觉上改变。我检查了AS引用,填充属性是iFill类型,应该接受solidColor实例。 (注意:我也尝试过0x000000作为有效颜色,SolidColor的第一个参数需要一个uint)

有关为何不应用颜色的任何想法?评论赞赏。

[edit]由于我最初发布了这个问题,因此我添加了一些更改以帮助澄清问题。

  1. 我实际上正在使用扩展的MXML组件< mx:PieChart> 。最初我试图在主应用程序的事件处理程序中设置上面列出的颜色。从那时起我所做的就是在扩展的PieChart组件中调用一个方法,如下所示:
  2. (主要应用)

    private function someEventHandler(evt:someEvent):void{
        pieChart.setPieSliceColor((pieChart.pieChartSeries.items[i] as PieSeriesItem));
    
    }
    
    1. 在自定义饼图组件中,我定义了以下方法:

      public setPieSliceColor(item:PieSeiesItem):void {     item.fill = new mx.graphics.SolidColor(0x0000ff,1); this.invalidateSeriesStyles();

      }

    2. 现在实际上会发生颜色变化,但是直到用户将鼠标移动到相应的饼图上才能看到!这很奇怪。

      感谢任何其他评论。

      再次感谢

      爱德华

2 个答案:

答案 0 :(得分:0)

这似乎是正确的,但我想你需要在设置此属性后重绘控件。您是否尝试在图表上调用invalidateDisplayList和/或invalidateProperties方法?

您也可以在系列中使用填充功能来执行此操作。

答案 1 :(得分:0)

我明白了......

这样的事情会起作用。

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

看起来虽然我正在改变颜色,但是直到我实际上鼠标切片时颜色才会生效...因此设置切片(或项目)currentState似乎可以解决问题。