我正在创建一个程序,其中值的更改会导致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]由于我最初发布了这个问题,因此我添加了一些更改以帮助澄清问题。
(主要应用)
private function someEventHandler(evt:someEvent):void{
pieChart.setPieSliceColor((pieChart.pieChartSeries.items[i] as PieSeriesItem));
}
在自定义饼图组件中,我定义了以下方法:
public setPieSliceColor(item:PieSeiesItem):void { item.fill = new mx.graphics.SolidColor(0x0000ff,1); this.invalidateSeriesStyles();
}
现在实际上会发生颜色变化,但是直到用户将鼠标移动到相应的饼图上才能看到!这很奇怪。
感谢任何其他评论。
再次感谢
爱德华
答案 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似乎可以解决问题。