Flash 附加进度条

Flash 附加进度条,flash,apache-flex,actionscript-3,mxml,mxmlc,Flash,Apache Flex,Actionscript 3,Mxml,Mxmlc,在以下代码中,如何将进度条附加到声音并指示其进度 <mx:Script> <![CDATA[ import flash.media.*; import flash.net.NetStream; [Embed(source="new1.mp3")] [Bindable] public var sndCls:Class;

在以下代码中,如何将进度条附加到声音并指示其进度

    <mx:Script>
        <![CDATA[

            import flash.media.*;
            import flash.net.NetStream;

            [Embed(source="new1.mp3")]
            [Bindable]
            public var sndCls:Class;

            public var snd:Sound = new sndCls() as Sound;
            public var sndChannel:SoundChannel;
            private var recordingState:String = "idle";

            public function playSound():void {
                sndChannel=snd.play();
            }

            public function stopSound():void {
               sndChannel.stop();
            }

        ]]>
    </mx:Script>


     <mx:Button label="Play" click="playSound()" />
     <mx:ProgressBar x="30" y="36" mode="manual" id="audioprogress" label=""
                     labelPlacement="bottom" width="220" fontSize="10" 
                     fontWeight="normal"/>
 </mx:Application>

以下是我知道的最简单的方法:

首先,在脚本部分创建两个函数:

public function get bytesLoaded():Number {
    if(sndChannel == null)
        return 0;

    return sndChannel.position;
}

public function get bytesTotal():Number {
    return snd.length;
}

public function clearProgress():void {
    sndChannel = null;
}
然后,将
ProgressBar
更改为“轮询”模式,并将源设置为
this

<mx:ProgressBar ... mode="polled" source="{this}" />

非常适合我:)


注意函数需要命名为
bytesload
bytesTotal
。它是
ProgressBar
的“轮询”模式的一部分。如果你真的想要“手动”模式,你需要创建一个比这个机制更复杂的计时器。

谢谢它工作了,所以如果再次播放歌曲,如何重新设置进度条。@Rajeev:只需将
sndChannel
置零就可以了。此外,只要再次按“播放”,进度将返回到零。如果您想在按play之前将其返回,您可以始终切换到“手动”模式(
audioprogress.mode=“manual”
),设置进度(
audioprogress.setProgress(0,snd.length)
),然后返回“轮询”。但是,如果这样做,请确保sndChannel为null或类似的内容,因为
ProgressBar
将再次开始提问。如果是相同的
sndChannel
,则进度将被设置回原来的位置。希望有帮助:)请编辑和回答,并给我的代码。谢谢所有的帮助。真的很感谢it@Rajeev当前位置我认为这确实超出了这个问题的范围,但我还是做了。根据你想要的行为,你可能不得不用不同的方式。我提出了最快速/最肮脏的方法来将进度恢复到零。当然,它假定您已使用该声道。您也可以在
stopSound()
中执行相同的操作。