2016-07-13 17 views
4

klicken Wenn ich einen Ton spielen wollen, wenn ein Benutzer auf eine Schaltfläche klickt es ist:Android - spielen verschiedene Sound auf je Sekunde

Button one = (Button) this.findViewById(R.id.button1); 
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);  

one.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v){ 
    mp.start(); } 
    }); 

Aber was soll ich tun, wenn ich zwei Töne haben, und ich will spielen ein unterschiedlicher Sound bei jedem zweiten Klick?

Antwort

3
int iClicked = 0; 
public void onClick(View v) 
{ 
    iClicked++; 
    if(iClicked % 2==0){ 
     // Do sth, e.g. play sound I 
    } 
    else { // Do sth else, e.g. play sound II 
    } 
} 
0

versuchen, diese

private int rId=0;//class member 
    //onclick 
    final int [] music={R.raw.soho,R.raw.other}; 
    int id=music.length%2; 
    final MediaPlayer mp = MediaPlayer.create(this, rId); 
    id++; 
0

ich einen diffrent Sound an jedem zweiten Klick spielen wollen?

Dazu:

1. Speichern Sie alle RAW-Datei-IDs in einem Integer Array.like:

int arrRawFiles ={R.raw.soho,R.raw.soho2,R.raw.soho3} 

2. Auf onClick der Taste erzeugt eine Zufallszahl nach Array-Länge und dann Raw-Datei-ID von Array mit dieser Nummer:

public void onClick(View v) 
    { 
    int index = new Random().nextInt(arrRawFiles.length); 
    MediaPlayer mp = MediaPlayer.create(this,index); 
    mp.start(); 
    } 
0
MediaPlayer mp;  
int clickCount=0; 
one.setOnClickListener(new OnClickListener(){ 
public void onClick(View v) 
{ 
if(clickCount %2 ==0){ 
    mp = MediaPlayer.create(this, R.raw.soho); 
} 
else{ 
    mp = MediaPlayer.create(this, R.raw.another); 
} 
mp.start(); 
clickCount++; 
} }); 
1

es ist sehr einfach. sehen Sie Beispielcode und versuchen ...

 final boolean isFirstSound = true; 
     Button one = (Button) this.findViewById(R.id.button1); 
     final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); 
     final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound); 
     one.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       isFirstSound = !isFirstSound; 
       if(isFirstSound) 
        mp.start(); 
       else 
        mp2.start(); 
      } 
     }); 
0

Sie den Verweis auf die Audio-Clips in ein Array setzen können

int[] audio={R.raw.clip1,R.raw.clip2}; 
for(i=0;i<audio.length;i++){ 

//your MediaPlayer Code here 

} 

ich habe nicht diese versuchen, aber Sie erhalten die Idee davon bekommen, wie man spielt viele Clips. Glück

0
public class ButtonPlayer implements View.OnClickListener { 
    private final int[] sounds; 
    private int soundIndex = -1; 

    public ButtonPlayer(int... sounds) { 
     this.sounds = sounds; 
    } 

    @Override 
    public void onClick(View view) { 
     if (sounds.length != 0) { 
      soundIndex++; 
      soundIndex = soundIndex % sounds.length; 
      MediaPlayer mp = MediaPlayer.create(this, sounds[soundIndex]); 
      mp.start(); 
     } 
    } 
} 

dann irgendwo im Code:

Button one = (Button) this.findViewById(R.id.button1); 
one.setOnClickListener(new ButtonPlayer(
          R.raw.first_composition, 
          R.raw.second_composition)); 

Sie später diese Klasse optimieren, indem für jeden Sound in Konstruktor 'n' Media-Player zu erzeugen. Aber es ist Aufgabe der Optimierung, nicht der Implementierung.

Und natürlich immer versuchen, unabhängige Klassen für selbst kleine Features zu erstellen. Überflüssige Aktivität nicht.

0
int count=0; 
    Button one = (Button) this.findViewById(R.id.button1); 
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); 

    one.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      count++; 

      if(count%2==1) { 
       //play first sound 
      }else{ 
       //play second sound 
      } 

     } }); 
0

versuchen so etwas wie

boolean playFirst = true; 
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); 
     final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound_soho); 
buttonClick.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     if(playFirst == true){ 
      mp.start(); 
      playFirst = false; 
     }else{ 
      mp2.start(); 
      playFirst = true; 
     } 

    } 
}); 
0

Wenn Sie nur zwischen zwei Sounds wechseln wollen, ich glaube, Sie für den Check ersten Mal keine boolean oder int-Wert müssen einfach überprüfen, ob sound1 spielen wird - > Stop sound1 und offener Sound2 und gegenüber

final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.soho); 
final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound); 

buttonClick.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     if(mp1.isPlaying()){ 
      mp1.stop(); 
      mp2.start(); 
     }else{ 
      mp2.stop(); 
      mp1.start(); 
     } 
    } 
}); 

Hope this Hilfe

+0

Die Logik dieses doesn Es ergibt keinen Sinn. Sound1 (mp1) wird nie abspielen .... –

+0

@H.Brooks warum glaubst du mp3 Sound wird nie spielen, hast du es getestet.korrigiere mich, wenn ich falsch liege –

+0

Ich habe es gerade getestet, als ich den Knopf drücke, wenn es das erste Mal ton1 spielt, wenn ich es wieder drücke passiert nichts. Ich habe bereits eine der richtigen Antworten markiert, aber ich würde gerne Ihren Ansatz verwenden. –