riproduzione di un suono in loop quando si preme il pulsante in Android
-
29-09-2019 - |
Domanda
il mio problema è semplice. Voglio riprodurre un suono in loop solo quando si preme un tasto. Di seguito sono l'istruzione switch e se gli altri approcci che ho provato. nella migliore delle ipotesi, posso giocare il suono, ma non voglio mettere in pausa quando il pulsante non è premuto.
public boolean onTouch(View v, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_DOWN){
mp.setLooping(true);
mp.start();
}else if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_UP)
{mp.pause();
}
}
public boolean onTouch(View v, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mp.setLooping(true);
mp.start();
case MotionEvent.ACTION_UP:
mp.pause();
}
return false;
}
Soluzione
Prova ritorno true
invece false
alla fine del onTouch
.
Da (probabilmente) accadendo in questo momento è che si ottiene un evento ACTION_DOWN
che inizia il suono. Restituendo false
dite al quadro che si non ha fatto consumare l'azione, che ci vuole per dire che non si consumerà le azioni future, sia. Esso, quindi, interrompere l'invio di eventi di tocco al vostro punto di vista.
Quando si arriva l'evento ACTION_DOWN, stai restituendo vero? In caso contrario, questo è probabilmente il problema. il quadro consegnerà solo i futuri eventi di tocco (ACTION_MOVEs e l'ACTION_UP) a Tale tesi, se il suo tocco ascoltatore o onTouchEvent restituisce true.
Altri suggerimenti
Sposta il mp di fuori del onTouch Handler!
MediaPlayer mp;
public boolean onTouch(View v, MotionEvent event) {
mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mp.setLooping(true);
mp.start();
case MotionEvent.ACTION_UP:
mp.pause();
}