嗨,我是Android编程的新手。我的问题是我希望在继续下一个循环之前做一个延迟,这取决于我的数组的大小,以便声音不会重叠。
这是我的代码:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
}
}
}
我尝试使用Thread.sleep,但我需要停止使用按钮单击播放声音,但由于Thread.sleep我无法单击按钮,所以我不得不忽略使用它。但是这是我的代码,以防万一有人有解决方案。我已经尝试过Thread.currentThread.interrupt,但是当我使用它时,我的声音再次重叠。
使用Thread.sleep的代码:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}
}
}
我尝试的另一种方法是postDelayed但似乎在第一次循环后它没有延迟。
这是我的postDelayed代码:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}
}
}
我也试过改变,4000到(i + 1)* 4000和其他人的建议一样,但仍然无法正常工作。而且我也尝试将延迟放在if else语句之外,但结果是一样的。
是否有人可以建议并帮助解决我的问题?请。我已经工作了一个星期。提前致谢。
答案 0 :(得分:1)
请使用此
for (int i = 0; i < 4; i++) {
String u = " q";
handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
Toast.makeText(getApplicationContext(), "i" , Toast.LENGTH_SHORT).show();
}
},4000);
}
意味着每次只将所有条件放在一个处理程序中并初始化处理程序。这在我的最后正常工作。
答案 1 :(得分:1)
试试这段代码:
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
}else if (u.equals("b4")){
MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b4);
mp.setNextMediaPlayer(mp1);
}else if (u.equals("c4")){
MediaPlayer mp2= MediaPlayer.create(this, R.raw.c4);
mp.setNextMediaPlayer(mp2);
}
}