2010-04-11 16 views
23

Mam następujący kod dla Androida, który działa dobrze, aby odtworzyć dźwięk po kliknięciu przycisku:zdarzenia wywołującego, gdy przycisk jest wciśnięty w Androidzie

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

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

    } 
}); 

Mój problem jest, że chcę dźwięk od razu grać po naciśnięciu przycisku (touch down), a nie po zwolnieniu (touch up). Jakieś pomysły, jak mogę to osiągnąć?

Odpowiedz

18

Być może używając OnTouchListener? Domyślam się, że MotionEvent będzie miał kilka metod rejestrowania dotyku na obiekcie.

button.setOnTouchListener(new OnTouchListener() { 

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

Dzięki za odpowiedzi. Podczas próby użycia tego kodu wystąpiły następujące błędy: - Typ new View.OnTouchListener() {} musi implementować odziedziczoną metodę abstrakcyjną View.OnTouchListener.onTouch (View, MotionEvent) - Metoda onTouch (View, MotionEvent) z type new View.OnTouchListener() {} musi zastąpić nadklasę \t metoda - MotionEvent nie może być rozwiązany na typ – codeman

+0

Odpowiedź brzmi: zmień poziom kompilatora na 1.6 (http://stackoverflow.com/questions/1678122/must- override-a-superclass-method-errors-after-importing-a-project-into-eclipse) –

29

Powinieneś to zrobić: b to przycisk.

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

Nadal dostaję te błędy: - Typ new View.OnTouchListener() {} musi implementować odziedziczoną metodę abstrakcyjną View.OnTouchListener. onTouch (View, MotionEvent) - Metoda onTouch (View, MotionEvent) typu new View.OnTouchListener() {} musi zastąpić metodę nadklasy - MotionEvent nie może zostać rozwiązany na typ – codeman

+3

Kod podany w obu tych odpowiedziach wydaje się być poprawny. Dodaj import do 'android.view.MotionEvent'. Oto dokumentacja dla 'OnTouchListener': http://developer.android.com/reference/android/view/View.OnTouchListener.html – CommonsWare

+5

Dobrze, ale działa po imporcie MotionEvent i użyciu poniższej linii: if (event. getAction() == MotionEvent.ACTION_DOWN) { – codeman

Powiązane problemy