Frage

mein Problem ist einfach. Ich möchte nur einen Looping Sound spielen, wenn eine Taste gedrückt wird. Im Folgenden sind die switch-Anweisung und wenn sonst Ansätze, die ich ausprobiert habe. am besten, ich den Ton spielen kann, aber es wird nicht anhalten, wenn die Taste nicht mehr gedrückt wird.

    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;
   }
War es hilfreich?

Lösung

Versuchen true statt false am Ende onTouch zurück.

Was ist (wahrscheinlich) passiert ist, gerade jetzt, dass Sie ein ACTION_DOWN Ereignis erhalten, die Ihren Sound beginnt. Durch die Rückgabe false sagen Sie den Rahmen, dass Sie hat nicht verbrauchen die Aktion, die es zu verstehen, nimmt, dass Sie zukünftige Aktionen nicht verbrauchen, auch nicht. So wird es Berührungsereignisse zu Ihrer Ansicht aufhören zu senden.

Relevante Zitat von android-Entwickler :

  

Wenn Sie das ACTION_DOWN Ereignis bekommen,   kehren Sie wahr? Wenn nicht, diese   ist wahrscheinlich das Problem. Der Rahmen   wird nur zukünftige Touch-Ereignisse liefern   (ACTION_MOVEs und die ACTION_UP) zu   dass Ansicht, wenn seine Berührung Hörer oder   onTouchEvent gibt true zurück.

Andere Tipps

Bewegen Sie mp außerhalb des 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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top