单击后禁用PLAY按钮 - Adob​​e Flash Builder 4.6

时间:2012-10-02 20:27:09

标签: flex mobile button

我使用以下示例播放MP3文件(我不需要/想要“打开”对话框):

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">

<fx:Script>
    <![CDATA[
        import flash.media.*;
        [Embed(source="assets/marseljeza.mp3")]

              [Bindable]
        public var sndCls:Class;
        public var snd:Sound = new sndCls() as Sound; 
        public var sndChannel:SoundChannel;

        public function playSound():void {
            sndChannel=snd.play();
        }   
        public function stopSound():void {
            sndChannel.stop();
        }   
    ]]>
</fx:Script>

<s:HGroup>
    <s:Button label="play" click="playSound();"/>
    <s:Button label="stop" click="stopSound();"/>
</s:HGroup>
</s:View>`

点击播放按钮后,MP3文件播放得很好,但是如果我再次点击播放按钮,歌曲会从头开始同时开始,如果我点击按钮三,四,五次或更多次。所以我最终同时拥有同一首歌的“会话”。我希望在第一次单击后禁用PLAY按钮,并在单击STOP后再次启用相同的按钮。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

要回答您的具体问题,您可以使用按钮上的enabled属性。在你的playSound()方法中,执行以下操作::

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

请务必在playButton中添加ID:

<s:Button id="playButton" label="play" click="playSound();"/>

您可能需要考虑在playSound()方法中添加一个检查,以便在播放时不播放声音。为此,首先创建一个变量:

protected var isPlaying : Boolean = false;

然后像这样调整playButton()方法:

public function playSound():void {
   if(!isPlaying){
    sndChannel=snd.play();
    isPlaying = true;
   }
}   

在上述任何一种情况下,您可能希望向complete事件添加事件侦听器,以便重新启用按钮或更改isPlaying标志。方法是这样的:

public function playSound():void {
   if(!isPlaying){
    snd.addEventListener(Event.COMPLETE,onSoundComplete);
    sndChannel=snd.play();
    isPlaying = true;
   }
}   

public function onSoundComplete(event:Event):void{
  isPlaying = false;
  playButton.enabled = true;
  snd.removeEventListener(Event.COMPLETE,onSoundComplete);
}

您也可以使用停止声音方法调用onSoundComplete方法:

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