2017-05-07 5 views
0

Je suis nouveau ici et je suis un nouveau dans java. Toutes mes connaissances sur le code basé sur ce que je peux trouver dans le web pour mon projet. Donc d'une part je connais des choses difficiles d'autre part je ne connais pas de choses simples. En ce moment je suis coincé dans cette situation. J'ai un bouton avec un son en boucle ce que j'essaie de faire est quand je touche le bouton il devrait changer l'image sur "button_prees" quand je relâche le bouton il devrait jouer son et changer l'image sur "button_on" Donc pour ce moment code Au-dessous du travail bien mais maintenant j'essaye de faire la séquence inverse. Vous touchez le même bouton et changez l'image sur "button_prees2" que lorsque vous relâchez le bouton, il devrait arrêter de jouer le son et changer l'image sur "button_off"Comment jouer et arrêter le son par un bouton en utilisant Soundpool

Comment implémenter ceci dans le code ci-dessous?

final Button b1 = (Button) findViewById(R.id.button1); 
     b1.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       switch (motionEvent.getAction()){ 
        case MotionEvent.ACTION_DOWN: 


         b1.setBackgroundResource(R.drawable.button_prees); 

         break; 

        case MotionEvent.ACTION_MOVE: 

         break; 

        case MotionEvent.ACTION_UP: 


         myS.play(s1I, 1, 1, 1, -1, 1); 

         b1.setBackgroundResource(R.drawable.button_on); 

         break; 
       } 
       return true; 
      } 
     }); 

Répondre

0

Vous pouvez utiliser un booléen comme indicateur pour l'état du bouton. Très brièvement et essentiellement:

boolean soundsOn = false; 
public void setSoundsOn(boolean soundsOn){ 
    this.soundsOn = soundsOn; 
} 

public boolean isSoundsOn(){ 
    return soundsOn; 
} 
... 

// Then for your Button listener: 
onTouch(...) 
if (!isSoundsOn){ 
    // Your above above code to change resources, start playing 
    // EXCEPT 
    case MotionEvent.ACTION_UP: 
    ... 
    setSoundsOn(true); 
    ... 
}else{ 
    // Code to stop etc. 
    // INCLUDING 
    case MotionEvent.ACTION_UP: 
    ... 
    setSoundsOn(false); 
    ... 
} 
... 

Idéalement, vous devriez faire son sûr a réussi à démarrer/arrêter avant d'appeler setSoundsOn(...) sinon vos étiquettes pourraient finir par dire ce qui est pas. Espérons que cela aide ...