java - 计算 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();
}
}
});
}
};
解决方案
您不能在同一个 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 之外。
推荐阅读
- aspnetboilerplate - 测试错误:无法加载文件或程序集'Castle.Core,版本 = 4.0.0.0,文化 = 中性
- php - 在谷歌地图上显示多张 api 结果照片
- http-post - 如何在 STRAPI 中发布关系
- python - AttributeError: 'NoneType' 对象在使用 pip 包安装包时没有属性'encoding'
- elasticsearch - 弹性搜索上的滚动时间增量效果
- javascript - 在 Selenium 中使用 Xpath 改变 innerHTML;Python 创建多个导致 SyntaxError: Invalid or unexpected token 的转义
- php - 致命错误:在布尔值上调用成员函数 bind_param()。PHP 错误
- python - Selenium 很好地检测到弹出对话框,但无法处理它
- python - 计算python列表中对象的出现次数
- reactjs - 图像 URL 同时采用 localhost 和服务器主机