Android - 每次单击按钮时从头开始播放相同的声音
Android - play the same sound from the beginning at each button click
我用按钮和声音文件 (mp3) 创建了简单的代码,
现在,当我按下按钮时,声音文件正在播放,但如果我多次按下它(快速),它只是在第一次点击时播放,直到 mp3 结束......我希望每次点击播放从一开始的声音。
public class TrafficLightsActivity extends Activity implements OnClickListener {
private ImageButton Upbutton ;
private ImageButton Downbutton ;
private ImageView Image ;
private MediaPlayer mp1 ;
private MediaPlayer mp2 ;
int counter=5 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.traffic_lights);
Upbutton = (ImageButton) findViewById (R.id.button1) ;
Downbutton = (ImageButton) findViewById (R.id.button2) ;
Image = (ImageView) findViewById(R.id.imageView1) ;
mp1 = MediaPlayer.create(this, R.raw.nextsound) ;
mp2 = MediaPlayer.create(this, R.raw.backsound) ;
Upbutton.setOnClickListener(this) ;
Downbutton.setOnClickListener(this) ; }
@Override
public void onClick(View v) {
if (Upbutton == v){
if (mp1.isPlaying()){
mp1.stop() ;
}
counter= counter+1 ;
System.out.println("Number of clicks is: " + counter) ;
mp1.start();
} }
您可以调用 seekTo(0)
方法,让从头开始重放声音而不用结束声音:
if (Upbutton == v){
if(mp1.isPlaying())
mp1.seekTo(0);
mp1.start();
}
试试这个方法
@Override
public void onClick(View v) {
if(mp1!=null){
try{
mediaPlayer.stop();
mediaPlayer=null;
mediaPlayer.release();
}
}
catch(IllegalStateException e){
//System.out.println(e);
}
catch(Exception e){
//System.out.println(e);
}
else{
mp1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
我用按钮和声音文件 (mp3) 创建了简单的代码, 现在,当我按下按钮时,声音文件正在播放,但如果我多次按下它(快速),它只是在第一次点击时播放,直到 mp3 结束......我希望每次点击播放从一开始的声音。
public class TrafficLightsActivity extends Activity implements OnClickListener {
private ImageButton Upbutton ;
private ImageButton Downbutton ;
private ImageView Image ;
private MediaPlayer mp1 ;
private MediaPlayer mp2 ;
int counter=5 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.traffic_lights);
Upbutton = (ImageButton) findViewById (R.id.button1) ;
Downbutton = (ImageButton) findViewById (R.id.button2) ;
Image = (ImageView) findViewById(R.id.imageView1) ;
mp1 = MediaPlayer.create(this, R.raw.nextsound) ;
mp2 = MediaPlayer.create(this, R.raw.backsound) ;
Upbutton.setOnClickListener(this) ;
Downbutton.setOnClickListener(this) ; }
@Override
public void onClick(View v) {
if (Upbutton == v){
if (mp1.isPlaying()){
mp1.stop() ;
}
counter= counter+1 ;
System.out.println("Number of clicks is: " + counter) ;
mp1.start();
} }
您可以调用 seekTo(0)
方法,让从头开始重放声音而不用结束声音:
if (Upbutton == v){
if(mp1.isPlaying())
mp1.seekTo(0);
mp1.start();
}
试试这个方法
@Override
public void onClick(View v) {
if(mp1!=null){
try{
mediaPlayer.stop();
mediaPlayer=null;
mediaPlayer.release();
}
}
catch(IllegalStateException e){
//System.out.println(e);
}
catch(Exception e){
//System.out.println(e);
}
else{
mp1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}