簡體   English   中英

如何在單擊按鈕時停止播放聲音以啟動另一個聲音文件?

[英]How to stop playing sounds on button click to start another sound file?

我有兩個按鈕和兩首歌。 如果我單擊第一個按鈕,將播放第一個聲音。 但是,如果我在播放第一個聲音時單擊第二個按鈕,第二個聲音也會開始播放。
我怎樣才能停止其他聲音?

我的代碼:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final MediaPlayer johnCenaPlayer = MediaPlayer.create(this, R.raw.john_cena);
    Button johnCenaButton = (Button) findViewById(R.id.john_cena_button);
    johnCenaButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            johnCenaPlayer.start();
        }
    });

    final MediaPlayer haGayPlayer = MediaPlayer.create(this, R.id.ha_gay_button);
    Button haGayButton = (Button) findViewById(R.id.ha_gay_button);
    haGayButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            haGayPlayer.start();
        }
    });
}

使用 stop() 方法停止 clickListener 中的其他 MediaPlayer。

public void onClick(View view) {
    ha_gay.stop()
    john_cena.start();
}

如果您有許多音頻文件,請使用單個 MediaPlayer 並動態更改源。

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final MediaPlayer mediaPlayer = new MediaPlayer();

    Button john_cena_button = (Button) findViewById(R.id.john_cena_button);
    john_cena_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            stopAndPlay(R.raw.john_cena, mediaPlayer);
        }
    });

    Button ha_gay_button = (Button) findViewById(R.id.ha_gay_button);
    ha_gay_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            stopAndPlay(R.raw.ha_gay, mediaPlayer);
        }
    });
}

// This resets the mediaPlayer and starts the given audio
private void stopAndPlay(int rawId, MediaPlayer mediaPlayer) {
    mediaPlayer.reset();
    AssetFileDescriptor afd = this.getResources().openRawResourceFd(rawId);
    try {
        mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.start();
}

}

如果您有多個音頻文件,我認為一個簡單的解決方案是將為播放音頻文件而創建的每個按鈕分配一個標簽。標簽的使用使啟動和停止按鈕更加容易。 使用標簽時,應將標簽設置為與文件名相同。 完成此操作后,可以使用以下實際代碼:

     public void play(View view){

    buttonPressed = (Button) view;

    mp = MediaPlayer.create(this, getResources().getIdentifier(buttonPressed.getTag().toString(), "raw", getPackageName()));

    mp.start();

    }

不支持-在代碼的開頭分配媒體播放器,這樣以后您就可以更輕松地調用它。 EX:

    MediaPlayer mp; 

要停止播放文件,請嘗試以下操作:

    public void stop(View view){

    if(mp.isPlaying()){

    mp.stop();
    }
    }

我只有14歲,不久前我才剛開始學習Java,但是到目前為止,我已經知道了,我認為我的代碼應該很容易解決您的問題。

試試這個。 對另一個做同樣的事情。

final MediaPlayer john_cena = MediaPlayer.create(this, R.raw.john_cena);
Button john_cena_button = (Button) findViewById(R.id.john_cena_button);
john_cena_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (he_gay.isPlaying()){
             he_gay.stop();
    }
        else if (john_cena.isPlaying()){
            john_cena.seekTo(0);
    }  else{
       john_cena.start();
    }
}
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM