Как воспроизвести два разных звука на двух разных кнопках на Android OnTouchListner? - PullRequest
0 голосов
/ 23 января 2019

Я делаю приложение для Android.Я добавил две кнопки и назначил им два разных звука.Теперь Button1 должен воспроизводить sound.mp3, а Button2 должен воспроизводить asound.mp3 при нажатии и звук должен быть остановлен при нажатии вверх.Проблема в том, что обе кнопки воспроизводят только один звук.

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);
mp = MediaPlayer.create(this, R.raw.sound);

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Создать два экземпляра экземпляра MediaPlayer

Для первого звука

MediaPlayer mpFirst = MediaPlayer.create(this, R.raw.sound); 

Для второго звука

MediaPlayer mpSecond = MediaPlayer.create(this, R.raw.asound); 

используйте эти два экземпляра соответствующим образом

0 голосов
/ 23 января 2019
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


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

ImageButton btn2 = (ImageButton) this.findViewById(R.id.button2);
btn2.setOnTouchListener(this);
mp = MediaPlayer.create(this, R.raw.asound); // this is your problem. you set the MediaPlayer fixed to this sound
}

Вы должны установить звук в зависимости от того, какая кнопка была нажата.Я не использовал Android раньше, поэтому я не уверен на 100% в коде, но вам понадобится что-то вроде этого:

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 голосов
/ 23 января 2019
  1. Необходимо создать два медиаплеера
  2. Вы должны указать, какая кнопка является нажатой

Используйте этот код

private MediaPlayer mp1;
private MediaPlayer mp2;


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


    ImageButton btn = (ImageButton) this.findViewById(R.id.button1);
    btn.setOnTouchListener(this);
    mp1 = MediaPlayer.create(this, R.raw.sound);

    ImageButton btn2 = (ImageButton) this.findViewById(R.id.button2);
    btn2.setOnTouchListener(this);
    mp2 = MediaPlayer.create(this, R.raw.asound);
}

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

    case MotionEvent.ACTION_DOWN: {
        if(v.getId() == R.id.button1){
             mp1.setLooping(true);
             mp1.start();
        }else{
             mp2.setLooping(true);
             mp2.start();
        }

    }

    break;
    case MotionEvent.ACTION_UP: {
        if(v.getId() == R.id.button1){
             mp1.pause();
        }else{
             mp2.pause();
        }

    }
    break;
    }
    return true;
}

Для 3 или более кнопок используйте это

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;
}
...