我试过在很多地方寻找这个,但找不到答案。我正在制作一个带有一组图像按钮的应用程序,这些按钮上有字母。我希望能够单击字母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();
}
};
答案 0 :(得分:2)
方法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都是浪费资源。
答案 1 :(得分:0)
试试这个:
public void onClick(View v) {
switch(v.getId()){
case R.id.R.id.imageButton1:
mp = MediaPlayer.create(this, R.raw.lettera);
break;
case R.id.R.id.imageButton2:
mp = MediaPlayer.create(this, R.raw.letterb);
break;
}
mp.start();
while (mp.isPlaying()) {
// do nothing
};
mp.release();
}
答案 2 :(得分:0)
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);
ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
btn2.setOnClickListener(this);
}
public void onClick(View v)
{
switch(v.getId())
{
case R.id.imageButton1:
mp = MediaPlayer.create(this, R.raw.lettera);
break;
case R.id.imageButton2:
mp = MediaPlayer.create(this, R.raw.letterb);
break;
default:
return;
}
mp.start();
while (mp.isPlaying()) {
// do nothing
}
mp.release();
}
}
答案 3 :(得分:0)
首先,删除那些onCreate1()
和onClick1()
方法。 onClick()
方法足以接收布局中所有按钮的点击事件。您可以使用view.getId()
方法执行此操作。为了播放声音,我建议使用SoundPool类,它具有非常清晰的界面用于此类目的。希望这会有所帮助。