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;
   }
¿Fue útil?

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.

android-developers :

  

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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top