jugando un bucle de sonido cuando el botón se pulsa en Android
-
29-09-2019 - |
Pregunta
mi problema es simple. Quiero jugar un bucle de sonido sólo cuando se pulsa un botón. Los siguientes son la sentencia switch y si otra cosa se aproxima a lo que he probado. a lo sumo, puedo reproducir el sonido pero no va a hacer una pausa cuando el botón no está presionado.
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;
}
Solución
Trate de volver true
en lugar de false
al final de onTouch
.
¿Cuál es (probablemente) pasando ahora es que se obtiene un evento ACTION_DOWN
que comienza su sonido. Al devolver false
le dice al marco que ¿verdad consumir la acción, lo que se necesita para significar que no se consumen las acciones futuras, ya sea. Por lo tanto, se detendrá el envío de eventos de toque a la vista.
Cuando llegue el evento ACTION_DOWN, ¿Vuelve verdad? Si no, este es probablemente el tema. El marco sólo se entregará futuros eventos de toque (ACTION_MOVEs y la ACTION_UP) a Ver que si su oyente táctil o onTouchEvent devuelve verdadero.
Otros consejos
Mueve el punto de fusión fuera de la 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();
}