我是Android新手,我遇到了一些問題。我試圖製作一個應用程序,它有三個按鈕,可以播放不同的短音。我希望聲音不會互相重疊,所以當我按下一個按鈕時,另一個聲音會停止。這是我的代碼。Android中的多個聲音按鈕:通過按鈕啓動,停止和循環聲音
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="42dp"
android:text="Button" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="91dp"
android:text="Button" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_below="@+id/button2"
android:layout_marginTop="48dp"
android:text="Button" />
</RelativeLayout>
。
package com.example.soundbutton;
import java.io.IOException;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MediaPlayer s1 = MediaPlayer.create(this, R.raw.trumpet);
final MediaPlayer s2 = MediaPlayer.create(this, R.raw.sy04);
final MediaPlayer s3 = MediaPlayer.create(this, R.raw.machine);
Button b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
s2.stop();
s3.stop();
try {
s1.prepare();
s1.seekTo(0);
s1.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Button b2 = (Button) findViewById(R.id.button2);
b2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
s1.stop();
s3.stop();
try {
s2.prepare();
s2.seekTo(0);
s2.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Button b3 = (Button) findViewById(R.id.button3);
b3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
s2.stop();
s1.stop();
try {
s3.prepare();
s3.seekTo(0);
s3.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
我已經在這裏搜索了很多,並且類似問題的答案還沒有爲我工作。到目前爲止,該應用程序不會播放我按下的第一個按鈕,但可以讓您播放其他按鈕。點擊幾下後,所有按鈕都可以抓住工作。我聽說SoundPool是短暫聲音的理想選擇,但我無法找到任何我想要做的示例代碼。無論如何,我知道必須有一個解決方案,我很抱歉,如果這是一個微不足道的問題。我也很感謝如何循環每個按鈕的聲音,並仍然有來自每個按鈕的聲音不重疊。感謝任何和所有的幫助。
我編輯了我的代碼。我刪除了並準備調用IO異常,並嘗試/捕獲。所以現在看起來如果(s2.isPlaying()|| s2.isLooping()){s2.stop(); (s3.isPlaying()|| s3.isLooping()){ s3.stop(); s1.start(); } 現在所有的按鈕都會播放聲音,但是當點擊一個按鈕時,它會停止另一個按鈕的聲音。上一個按鈕在再次點擊後不會播放。 – user3362828