问题描述
我是android的新手。我已经实现了在单击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();
}
}
});
}
};
解决方法
您不能在同一视图上设置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之外。