在 android 工作室中按下时继续播放声音
Continue playing a sound when pressed down in android studio
我有一个持续时间为 4 的声音。我想通过按下而不停止它来连续播放这种声音,就像按下钢琴键一样,它会在不循环或停止的情况下播放声音。
c.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // Button Pressed
soundPool.stop(SID1_c);
SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
c.setBackgroundResource(R.drawable.key4);
return true;
case MotionEvent.ACTION_UP:// Button released
handler =new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
soundPool.stop(SID1_c);
}
},90);
return false;
}
return false;
}
});
button.setOnTouchListener(new View.OnTouchListener(){
onTouch(View v, MotionEvent event){
switch(getActionMasked()){
case ACTION_BUTTON_PRESS:
handler.removeCallbacksAndMessages(null);
soundPool.stop(SID1_c);
SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
c.setBackgroundResource(R.drawable.key4);
return true;
case ACTION_BUTTON_RELEASE:
handler.postDelayed(new Runnable() {
@Override
public void run() {
soundPool.stop(SID1_c);
}
},90);
return false;
}
return false;
}
});
你的代码问题:
如果你点击按钮两次
当你开始 post 延迟停止第一个按钮的声音时,这个停止将击中第二次按下而不是之前停止的第一个
要更正此问题,您应该在播放声音时退出处理程序
你可以在新印刷完成后使用 handler.removeCallbacksAndMessages(null);
我有一个持续时间为 4 的声音。我想通过按下而不停止它来连续播放这种声音,就像按下钢琴键一样,它会在不循环或停止的情况下播放声音。
c.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // Button Pressed
soundPool.stop(SID1_c);
SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
c.setBackgroundResource(R.drawable.key4);
return true;
case MotionEvent.ACTION_UP:// Button released
handler =new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
soundPool.stop(SID1_c);
}
},90);
return false;
}
return false;
}
});
button.setOnTouchListener(new View.OnTouchListener(){
onTouch(View v, MotionEvent event){
switch(getActionMasked()){
case ACTION_BUTTON_PRESS:
handler.removeCallbacksAndMessages(null);
soundPool.stop(SID1_c);
SID1_c = soundPool.play(sound_c, 1, 1, 1, 0, 0);
c.setBackgroundResource(R.drawable.key4);
return true;
case ACTION_BUTTON_RELEASE:
handler.postDelayed(new Runnable() {
@Override
public void run() {
soundPool.stop(SID1_c);
}
},90);
return false;
}
return false;
}
});
你的代码问题:
如果你点击按钮两次
当你开始 post 延迟停止第一个按钮的声音时,这个停止将击中第二次按下而不是之前停止的第一个
要更正此问题,您应该在播放声音时退出处理程序
你可以在新印刷完成后使用 handler.removeCallbacksAndMessages(null);