Apache flex 如何动态更改mx:PieSeriesItem切片的颜色
我正在创建一个程序,其中值的更改会导致mx:PieChart中饼图切片的颜色动态更改 应该更改颜色的代码与此类似:Apache flex 如何动态更改mx:PieSeriesItem切片的颜色,apache-flex,actionscript,adobe,charts,mxml,Apache 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引用,fill属性的类型为iFill,应该接受
(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)
你有没有想过为什么不使用这种颜色?欢迎评论
[编辑]因为我最初发布了这个问题,所以我添加了一些更改来帮助澄清这个问题
Edward这似乎是正确的,但我想您需要在设置此属性后重新绘制控件。您是否尝试调用图表上的invalidateDisplayList和/或invalidateProperties方法 您也可以在该系列中使用填充函数来完成此操作。我知道了 像这样的东西会有用的
public function setPieSliceColor(item:PieSeriesItem):void{
item.fill = new mx.graphics.SolidColor(0x0000ff,1);
this.setFocus();
this.invalidateSeriesStyles();
// note this line
item.currentState = "rollOver";
}
虽然我正在更改颜色,但在我将鼠标移到切片上之前,颜色不会生效…因此设置切片(或项目)的当前状态似乎可以实现此目的。嗨,Christophe-我实际上添加了pieChart.invalidateDisplayList()。奇怪的是,只有当我将鼠标移到实际的馅饼片上时,颜色才会发生变化!我需要它立即显示出来。我想到了一个fill函数,但是我怎样才能再次调用该函数呢?我以为它只在派第一次呈现时才被使用。我将对问题进行一些编辑以添加这些详细信息。如果要扩展控件,则可能需要在更改填充时调用受保护的“invalidateData()”方法。关于fill函数:这个函数在“updateDisplayList()”中被再次调用,因此您应该能够通过调用“invalidateDisplayList()”来调用它。感谢Christophe提供的反馈。我注意到,如果调用invalidateData(),pieChart的颜色会重置,这不是我真正想要的。我将尝试filterfunction,但是a)这不是贯穿所有的饼片吗?我只想更新特定的切片,b)此时我没有定义填充数组,我假设我必须为pieChart创建一个填充数组,以便它知道要更改其填充数组中的哪个“填充”?
public function setPieSliceColor(item:PieSeriesItem):void{
item.fill = new mx.graphics.SolidColor(0x0000ff,1);
this.setFocus();
this.invalidateSeriesStyles();
// note this line
item.currentState = "rollOver";
}