首页 > 解决方案 > 计算 ImageButton 点击​​次数不再播放声音

问题描述

我是安卓新手。我已经实现了在单击 ImageButton 时播放随机声音的代码,第一个问题是单击按钮时它不会一直播放随机声音 - 当我下次按下按钮时,它会选择一种声音并只播放这个声音播放与第一次单击按钮时相同的声音 - 每次单击按钮时我都会随机播放。此外,当我添加计算此按钮被点击次数的功能时,应用程序停止播放声音,它只显示我的按钮被点击了多少次,但没有更多的音频。这是我的代码:

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

import java.util.Random;


public class MainActivity extends AppCompatActivity {

    MediaPlayer mp;
    ImageButton soundbutton;

    int[] sounds={R.raw.audi, R.raw.berlin, R.raw.bratanki, R.raw.budzik, R.raw.cztery, R.raw.drzyz, R.raw.dziewczyny, R.raw.emeryt, R.raw.enter, R.raw.faza};
    Random r = new Random();
    //int Low = 0;
    //int High = 9;
    //int rndm = r.nextInt(High-Low) + Low;
    int rndm = r.nextInt(9);

    int clickcount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        //media player

        soundbutton = (ImageButton)this.findViewById(R.id.playButton);
        mp = MediaPlayer.create(getApplicationContext(),sounds[rndm]);
        soundbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        rndm = r.nextInt(9);
                        mp = MediaPlayer.create(getApplicationContext(),sounds[rndm]);
                    }
                    mp.start();
                } catch (Exception e) {
                    e.printStackTrace();
                }


                }



        });

        soundbutton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                clickcount=clickcount+1;
                if(clickcount==1)
                {
                    //first time clicked to do this
                    Toast.makeText(getApplicationContext(),"text2", Toast.LENGTH_LONG).show();
                }
                else
                {
                    //check how many times clicked and so on
                    Toast.makeText(getApplicationContext(),"text1:"+clickcount, Toast.LENGTH_LONG).show();
                }
            }
        });
        }


    };

标签: javaandroidonclickandroid-mediaplayer

解决方案


您不能在同一个 View 上设置 2 个 setOnClickListeners 。

try {
        if (mp.isPlaying()) {
            mp.stop();
            mp.release();

        }
        rndm = r.nextInt(9);
        mp = MediaPlayer.create(getApplicationContext(), sounds[rndm]);
        mp.start();
    } catch (Exception e) {
        e.printStackTrace();
    }

看到你写的设置 mp 的代码只会在 mp 播放声音时运行。我只是把它移到了 if 之外。


推荐阅读