То, как я делал это в прошлом, - это создание пользовательского скина индикатора выполнения, а затем установка заливки в качестве градиента, который проходит по всей длине бара (даже при том, что на самом деле рисуется меньшая часть бара Звучит странно, если использовать градиент для чего-то, что имеет жесткие остановки для цветов, но на самом деле это довольно просто. Вы устанавливаете остановку для следующего цвета прямо рядом с конечной остановкой для предыдущего цвета. Вот пример, где цвет меняется с зеленого на красный в средней точке:
package some.package.skins
{
import flash.display.GradientType;
import flash.geom.Matrix;
import mx.core.UIComponent;
import mx.skins.halo.ProgressBarSkin;
public class ColoredProgressBarSkin extends ProgressBarSkin
{
override protected function updateDisplayList(w:Number, h:Number):void {
super.updateDisplayList(w, h);
graphics.clear();
var fullWidth:int = w;
if (parent != null && (parent as UIComponent).mask != null)
fullWidth = (parent as UIComponent).mask.width;
var matrix:Matrix = new Matrix();
matrix.createGradientBox(fullWidth, h);
var colors:Array = [0x00ff00, 0x00ff00, 0xff0000, 0xff0000];
this.graphics.lineStyle();
this.graphics.beginGradientFill(GradientType.LINEAR, colors, [1,1,1,1], [0,128,128,255], matrix);
this.graphics.drawRoundRect(2, 2, w - 4, h - 4, h - 4);
}
}
}
Затем вы устанавливаете этот скин в стиле barSkin на индикаторе выполнения, либо в CSS, либо в теге, в котором вы используете индикатор выполнения.
Надеюсь, это поможет.