2010-04-11 12 views
23

tengo el siguiente código para Android que funciona muy bien para reproducir un sonido una vez que se hace clic en un botón:evento desencadenante cuando el botón es presionado hacia abajo en Android

Button SoundButton2 = (Button)findViewById(R.id.sound2); 
     SoundButton2.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     mSoundManager.playSound(2); 

    } 
}); 

Mi problema es que quiero el sonido a reproducir inmediatamente al presionar el botón (tocar hacia abajo), no cuando se suelta (retocar). ¿Alguna idea sobre cómo puedo lograr esto?

Respuesta

18

¿Quizás usando un OnTouchListener? Supongo que MotionEvent tendrá algunos métodos para registrar un toque en el objeto.

button.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
    } 
    })) 
+0

Gracias por la respuesta. Obtuvo los siguientes errores al intentar usar ese código: - El tipo nuevo View.OnTouchListener() {} debe implementar el método abstracto heredado View.OnTouchListener.onTouch (View, MotionEvent) - El método onTouch (View, MotionEvent) de escriba new View.OnTouchListener() {} debe anular una superclase \t método - MotionEvent no se puede resolver con un tipo – codeman

+0

La respuesta es cambiar el nivel del compilador a 1.6 (http://stackoverflow.com/questions/1678122/must- override-a-superclass-method-errors-after-importing-a-project-into-eclipse) –

29

Debe hacer esto: b es el botón.

b.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        mSoundManager.playSound(2); 
        return true; 
       } 

       return false; 
      } 
     }); 
+0

Obteniendo estos errores: - El tipo nuevo View.OnTouchListener() {} debe implementar el método abstracto heredado View.OnTouchListener. onTouch (View, MotionEvent) - El método onTouch (View, MotionEvent) de tipo new View.OnTouchListener() {} debe anular un método de superclase - MotionEvent no se puede resolver con un tipo – codeman

+3

El código proporcionado en estas dos respuestas parece ser correcto. Agregue una importación a 'android.view.MotionEvent'. Aquí está la documentación para 'OnTouchListener': http://developer.android.com/reference/android/view/View.OnTouchListener.html – CommonsWare

+5

Bien, lo tengo que trabajar después de importar MotionEvent y usar esta línea: if (event. getAction() == MotionEvent.ACTION_DOWN) { – codeman

3

import android.view.MotionEvent;

Cuestiones relacionadas