Apache flex 如何在Flex/Actionscript中动态填充进度条?

Apache flex 如何在Flex/Actionscript中动态填充进度条?,apache-flex,actionscript,progress-bar,Apache Flex,Actionscript,Progress Bar,我想创建一个进度条,其中%的进度条根据某个变量用不同的颜色填充。例如,33%的人会用不同的颜色填充33%的进度条,然后40%的人会同样地填充40%的进度条。在Actionscript和Flex 3中实现这一点的最佳方法是什么?不久前,我不得不这样做,并选择了以下路线: 我通过扩展DownloadProgressBar构建了一个定制预加载程序,然后将其与Degrafa组件集成 为了创建自定义预加载程序,我想我使用了以下tute: 然后创建了一个单独的类,负责动态调整上面链接的degrafa组件中

我想创建一个进度条,其中%的进度条根据某个变量用不同的颜色填充。例如,33%的人会用不同的颜色填充33%的进度条,然后40%的人会同样地填充40%的进度条。在Actionscript和Flex 3中实现这一点的最佳方法是什么?

不久前,我不得不这样做,并选择了以下路线:

我通过扩展DownloadProgressBar构建了一个定制预加载程序,然后将其与Degrafa组件集成

为了创建自定义预加载程序,我想我使用了以下tute:

然后创建了一个单独的类,负责动态调整上面链接的degrafa组件中的值。当然,在SWFDownloadProgress函数中(在Progress事件中),您可以相应地调整这些值

我发现这是最快也是最干净的方法:)


祝你好运

我过去的做法是创建一个自定义进度条蒙皮,然后将填充设置为一个沿整个进度条长度的渐变(即使实际上绘制了一小部分进度条)。对颜色有硬停止的东西使用渐变听起来很奇怪,但实际上非常简单。将下一种颜色的停止点设置在上一种颜色的结束停止点旁边。下面是一个在中点处颜色从绿色变为红色的示例:

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中,也可以在使用进度条的标记中


希望能有所帮助。

在一个进度条中,您看到了多少种颜色?