lecture d'un son en boucle lorsque le bouton est enfoncé Android
-
29-09-2019 - |
Question
mon problème est simple. Je veux jouer un son en boucle que lorsqu'une touche est enfoncée. les éléments suivants sont l'instruction switch et si d'autre approche que j'ai essayé. au mieux, je peux jouer le son, mais ce ne sera pas une pause lorsque le bouton n'est plus pressé.
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;
}
La solution
Essayez de revenir true
au lieu de false
à la fin de onTouch
.
Quelle est (probablement) passe en ce moment est que vous obtenez un événement ACTION_DOWN
qui commence son. En retournant false
vous dites le cadre que vous n'a pas consomment l'action, qu'il faut pour dire que vous ne consommerez pas des actions futures, que ce soit. Ainsi, il cesse d'envoyer des événements tactiles à votre vue.
Lorsque vous obtenez l'événement ACTION_DOWN, Retournez-vous vrai? Dans le cas contraire, cette est probablement la question. le cadre ne livrera les événements tactiles futurs (ACTION_MOVEs et le ACTION_UP) à que Voir si son écoute tactile ou onTouchEvent renvoie true.
Autres conseils
Passez votre mp en dehors du 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();
}