繁体   English   中英

如何使按钮中的声音静音

[英]How to mute the sound in the button

我是 java 的新手,我不知道该怎么做。 这是我正在尝试执行的代码,我需要的是使用另一个按钮(播放停止)将正在播放到其他按钮的音效静音,并使用同一个按钮(播放停止)取消静音。

媒体播放器音频1、音频2、音频3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    audio1 = MediaPlayer.create(MainActivity.this, R.raw.addlife);
    audio2 = MediaPlayer.create(MainActivity.this, R.raw.freeeze);
    audio3 = MediaPlayer.create(MainActivity.this, R.raw.highlight);

    Button addlife = (Button) findViewById(R.id.button);
    Button freeze = (Button) findViewById(R.id.button2);
    Button highlight = (Button) findViewById(R.id.button3);
    Button playstop = (Button) findViewById(R.id.button4);

    addlife.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            audio1.start();
            Button button = (Button) v;
            button.setVisibility(View.INVISIBLE);
        }
    });

    freeze.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            audio2.start();
            Button button = (Button) v;
            button.setVisibility(View.INVISIBLE);
        }
    });

    highlight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            audio3.start();
            Button button = (Button) v;
            button.setVisibility(View.INVISIBLE);

        }
    });

    i = 0;

    playstop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        
            if (i == 0) {
                audio1.stop();
                audio2.stop();
                audio3.stop();
                playstop.setBackgroundResource(R.drawable.mute);
                i++;
            }
            else if (i == 1){
                audio1.start(); //does not work
                audio2.start(); //does not work
                audio3.start(); //does not work
                playstop.setBackgroundResource(R.drawable.unmute);
                i = 0;
            }
        }
    });

}

如果您正在尝试查找正在播放的声音,那么 MediaPlayer 有方法 - isPlaying()。 如果它正在播放,则返回 true。 在这种情况下,您需要这样的东西:

    if (audio1.isPlaying()){
     audio1.stop()
   addLife.setVisibility(View.VISIBLE)
    }

如果您需要暂停/播放当前播放的声音,您可以使用 pause() 和 start() 方法,但在这种情况下,您最好制作一些额外的 class 来处理所有操作。 例子:

    import android.media.MediaPlayer;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Objects;
    import java.util.UUID;
    
    public class MediaPlayerManager {
        
        public final HashMap<String, MediaPlayer> mediaPlayerList;
        public final ArrayList<String> keys;
        private String pausedPlayerKey;
        
        public MediaPlayerManager(MediaPlayer... mediaPlayers) {
            mediaPlayerList = new HashMap<>();
            keys = new ArrayList<>();
            if (mediaPlayers != null && mediaPlayers.length > 0) {
                for (MediaPlayer mediaPlayer : mediaPlayers) {
                    String uid = UUID.randomUUID().toString();
                    keys.add(uid);
                    mediaPlayerList.put(uid, mediaPlayer);
                }
            }
        }

 public boolean isAnyOnePlaying(){
        for (String key : keys) {
            MediaPlayer player = mediaPlayerList.get(key);
            if (player != null && player.isPlaying()) {
               return true;
            }
        }
        return false;
    }
    
        public void pauseIfPlaying() {
            for (String key : keys) {
                MediaPlayer player = mediaPlayerList.get(key);
                if (player != null && player.isPlaying()) {
                    player.pause();
                    pausedPlayerKey = key;
                    break;
                }
            }
        }
    
        public void resume() {
            if (pausedPlayerKey != null) {
                if (mediaPlayerList.containsKey(pausedPlayerKey) && mediaPlayerList.get(pausedPlayerKey) != null) {
                    Objects.requireNonNull(mediaPlayerList.get(pausedPlayerKey)).start();
                    pausedPlayerKey = null;
                }
            }
        }
    
    }

然后在 onCreate 方法中你可以做到这一点。

MediaPlayerManager mpm = new MediaPlayerManager({audio1, audio2, audio3});

接着:

playstop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            if (mpm.isAnyOnePlaying()){
                mpm.pauseIfPlaying();
            }else {
                mpm.resume();
            }
                //help//
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM