我尝试在很多地方搜索这个问题,但找不到答案。我正在制作一个应用程序,其中包含一组带有字母的图像按钮。我希望能够单击字母 A,并听到声音文件 A。如果单击字母 B,我想听到声音文件 B。到目前为止,我只有字母 A 和 B,以及声音文件 A 和 B。当我运行我的代码,我只能听到按钮 A 的声音,当我按下字母 B 时,什么也没有发生。这是我的代码:
package com.android.nishad.learn.hindi;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class AlphabetActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alphabet);
ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
btn.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
mp = MediaPlayer.create(this, R.raw.lettera);
mp.start();
while (mp.isPlaying()) {
// do nothing
};
mp.release();
}
public void onCreate1(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alphabet);
ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
btn2.setOnClickListener(this);
}
public void onClick1(View v) {
// TODO Auto-generated method stub
mp = MediaPlayer.create(this, R.raw.letterb);
mp.start();
while (mp.isPlaying()) {
// do nothing
};
mp.release();
}
};
最佳答案
方法onCreate1
和onClick1
没有用,因为它们从未被调用。相反,您应该将所有初始化代码放入 onCreate
方法中:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alphabet);
findViewById(R.id.imageButton1).setOnClickListener(this);
findViewById(R.id.imageButton2).setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
int rawid = 0;
switch(v.getId()) {
case R.id.imageButton1: rawid = R.raw.lettera; break;
case R.id.imageButton2: rawid = R.raw.letterb; break;
defalt: return; //do nothing if none of our buttons;
}
mp = MediaPlayer.create(this, rawid);
mp.start();
while (mp.isPlaying()) {
// do nothing
};
mp.release();
}
但请注意,这是一种非常低效的处理方式。相反,您应该拥有一个 MediaPlayer 实例,然后使用它根据需要播放各种声音。每次按下按钮时创建一个新的 MediaPlayer 是一种资源浪费。
关于java - 通过两个不同的按钮播放两个不同的声音文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507062/