嘿伙计我正试图通过使用
按一下按钮来显示图像Myimage.setVisibility(View.VISIBLE);
以下是代码的一部分:
case R.id.button5:
if(myRandom == 5 )
{
Myimage.setVisibility(View.VISIBLE);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.music);
mp.start();
while(mp.isPlaying())
{
}
found = true;
}
else
b5.setVisibility(View.GONE);
break;
现在对于b5这是一个按钮视图,该功能正常工作,按钮消失。 对于Myimage但是getvisibility()告诉我它是==可见但我无法在屏幕上看到它,我只能在switch语句结束后看到它 有什么想法吗?
我尝试过这样定义一个函数,以便tit在一个单独的线程上运行,但我有同样的图像问题没有出现。
public void startplayer()
{
Thread thread = new Thread(new Runnable() {
public void run() {
mp = MediaPlayer.create(getApplicationContext(), R.raw.fart);
mp.start();
while(mp.isPlaying())
{
}
}
});
thread.start();
感谢。
我最终得到了它:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mp = MediaPlayer.create(getApplicationContext(), R.raw.donkey);
mp.start();
while(mp.isPlaying())
{
}
finish();
}
}, 0);
答案 0 :(得分:1)
这可能是因为您使用while循环阻止UI线程。 你永远不应该做长时间的操作或等待主线程。
为了更好地理解主线程应该保持免费的原因,请阅读官方docs
在您的特定情况下,您应该实现回调。 只是做
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
override void onCompletion(MediaPlayer mp) {
// Here you recieve the callback even.
}
})
什么回调做(并在Android中习惯),当事情发生时通知你。因此,现在不要等待玩家自己完成游戏 - 只有在发生时才会收到通知。 请记住 - MediaPlayer知道它何时停止播放,你不应该为他做这份工作。 A nice blogpost with more info on callbacks
每当你想要进行while(true)
循环时,再想一想 - 出了点问题。
答案 1 :(得分:0)
我认为您通过在UI线程上运行此代码来阻止UI线程:
fg
只要您的MediaPlayer对象正在播放,上面的代码在UI线程上的行为基本上就像无限循环。您应该将此代码块发布到后台线程上,或者至少是“while(mp.isPlaying())”部分。