2010-10-13 6 views
0

Le code suivant doit gérer les événements ACTION_DOWN et ACTION_UP pour un bouton nommé collision. l'idée est qu'une fois if/else détermine que l'événement onTouch a été causé par un conflit et que l'instruction switch détermine ensuite ce qu'il faut faire en fonction de l'action. Je ne sais pas si le problème est que les instructions switch ne retournent pas vrai et cela peut être lié au problème. quand j'ajoute un retour, eclipse dit que le code est inaccessible ce que je ne comprends pas. J'avais l'impression que vous ne pouvez pas sortir d'un interrupteur sans pause. Ce qui se passe actuellement, c'est que le premier son se déclenche mais le code ne semble jamais détecter l'action lorsque le bouton est relâché et que le son est joué pour toujours. Toute aide serait appréciée.Problème avec les instructions if/else et switch

public boolean onTouch(View v, MotionEvent event) { 
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash); 
if (v.getId() == R.id.clash){ 

switch (event.getAction()){ 

case MotionEvent.ACTION_DOWN: 
    mp.setLooping(true); 
    mp.start(); 
    break; 

case MotionEvent.ACTION_UP: 
    mp.pause(); 
    break; 
} 

} 
return true; 
} 
    }); 
+0

même après avoir ajouté "return true;" Je ne reçois toujours rien sur l'action. Je peux même mettre le code pour jouer le son dans ce cas plutôt que l'action vers le bas et il ne fait rien. – Prmths

+3

Je ne suis pas sûr à ce sujet, mais cela ne créerait-il pas un nouvel objet MediaPlayer chaque fois que vous appuyez sur OU relâchez? Dans ce cas, vous appelleriez 'pause()' sur une autre instance de MediaPlayer que 'start()' a été appelé? – kcoppock

+0

cela a du sens. le problème est, quand je déplace la création de mp à la partie de la logique qui gère l'événement ACTION_DOWN, rien ne se passe. il ne joue aucun son du tout. Je commence à envisager d'abandonner complètement MediaPlayer puisque je dois créer et détruire l'objet chaque fois qu'un son est joué. Chaque recherche que je fais indique que vous ne pouvez pas définir DataSource à la volée. – Prmths

Répondre

3
//Add the following line in the code before your setOnTouchListener() 
MediaPlayer mp; 

public boolean onTouch(View v, MotionEvent event) { 

    if (v.getId() == R.id.clash){ 

     switch (event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      mp = MediaPlayer.create(getBaseContext(), R.raw.clash); 
      mp.setLooping(true); 
      mp.start(); 
      break; 

     case MotionEvent.ACTION_UP: 
      if(mp != null) 
      { 
       mp.pause(); 
       mp.release(); 
      } 
      break; 
     } 
    } 
} 

// I'm assuming this was from the onTouchListener()? -> }); 

Juste une pensée.

+0

qui fonctionne très bien. merci beaucoup, mec. c'était un problème de base mais je ne pouvais pas pour la vie de moi le faire correctement. – Prmths

+0

Pas de problème! Content que ça a marché pour toi. – kcoppock

Questions connexes