-1
votes

Comment jouer deux son différents sur deux boutons différents sur ANTOUCHLISTENER Android?

Je fais une application Android. J'ai ajouté deux boutons et a attribué deux sons différents à eux. Maintenant, la touche1 Shoudl Play Sound.mp3 et Button2 devraient lire asound.mp3 tout en appuyant sur Down et Sound doit être arrêté. Le problème est que les deux boutons ne jouent qu'un seul son. XXX


2 commentaires

Il semble que vous préfériez simplement la valeur du député, quoi qu'il arrive. L'affectation n'est pas faite dans un actelistener. Vous devriez l'installer à l'intérieur de l'événement Action.down (après, bien sûr comprendre quel bouton le déclenché)


Avez-vous réussi à résoudre votre problème?


3 Réponses :


0
votes
  1. Vous devez créer deux multimédia li>
  2. Vous devez spécifier quel bouton touche lèvre> utiliser ce code p> xxx pré>

    pour 3 boutons ou plus utilisez ceci P>

    private MediaPlayer mp;
    private int[] sounds = {R.raw.sound1,R.raw.sound2,R.raw.sound3};
    private int[] btns = {R.id.button1,R.id.button2,R.id.button3};
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //others codes
        for (int btn : btns) {
            (ImageButton) this.findViewById(btn).setOnTouchListener(this);
        }
    }
    
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
    
            case MotionEvent.ACTION_DOWN: {
                for (int i = 0 ; i<btns.length ; i++){
                    if (v.getId() == btns[i]){
                        mp = MediaPlayer.create(this, sounds[i]);
                        break;
                    }
                }
                mp.start();
            }
    
            break;
            case MotionEvent.ACTION_UP: {
                for (int btn : btns) {
                    if (v.getId() == btn) {
                        mp.pause();
                        break;
                    }
                }
            }
            break;
        }
        return true;
    }
    

6 commentaires

Deux multidiffers sont une option. Et bien qu'il n'y ait que deux boutons, cela ne fait pas de beaucoup de frais généraux ou de code redondant. Essayez la même chose avec 25 boutons. Ajoutez-vous 25 MediaPlayers et si-... d'autre pour tous? Il est plus facile d'avoir dans l'action_down: if (event.getid () == [bouton1]) {mp = mediaplayer.create (... // paramètres pour son 1); .... Après tout, l'ontlooping et le début ne devraient pas être dupliqués


@Awaisahmed Happy Coding, veuillez accepter la réponse si cela fonctionne


Juste 1 chose. Et si je veux créer trois boutons avec trois son différents? Aimablement révisé le code avec trois s'il vous plaît. je serai heureux


@Awaisahmed avez-vous vérifié?


Merci Rachesh. J'ai apporté une modification mineure dans votre code révisé en mettant le MP.setlooping (vrai); Juste après MP.Start (); .. Mais maintenant un autre problème, j'ai trois boutons 1, 2 et 3 avec des sons A, B et C. Lorsque j'appuie sur 1 bouton Son démarrage. Après avoir relâché 1 bouton lorsque je appuie sur 2 boutons B Sound commence. Mais lorsque j'appuie sur 2 boutons sans relâcher 1 bouton (touche multi-touches), le bouton 1 (Sound A) Les boucles ne s'arrêtent pas même après la libération et la lecture de boutons, même en arrière-plan. Je dois fermer mon application pour arrêter la boucle.


@Awaisahmed Je ne peux pas résoudre tous vos problèmes, il y a beaucoup de bugs que vous devez un par un résoudre, vous êtes programmeur et votre travail est résolu de bugs n'écrire que le code



0
votes

Créez deux instance d'instance Mediaplayer

pour le premier son xxx

pour le second son xxx

utilisez ces deux instances de manière appropriée


0 commentaires

0
votes
package com.example.sound1;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;

public class MainActivity extends Activity implements OnTouchListener {

private MediaPlayer mp;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


ImageButton btn = (ImageButton) this.findViewById(R.id.button1);
btn.setOnTouchListener(this);
// remove this -> mp = MediaPlayer.create(this, R.raw.sound);

ImageButton btn2 = (ImageButton) this.findViewById(R.id.button2);
btn2.setOnTouchListener(this);
// remove this -> mp = MediaPlayer.create(this, R.raw.asound);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: {
if ( event.getActionSource() == R.id.button1) {
  mp = MediaPlayer.create(this, R.raw.sound);
} else if ( event.getActionSource() == R.id.button2 ) {
  mp = MediaPlayer.create(this, R.raw.asound);
} else { mp = null; }
if ( mp != null ) {
mp.setLooping(true);
mp.start();
}
}

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

0 commentaires