当声音停止播放时,在android/Java中替换图像

当声音停止播放时,在android/Java中替换图像,java,android,Java,Android,我有一个应用程序,它可以替换图像并在点击按钮时播放声音,我想做的是在声音停止播放后恢复到原始图像 我的按钮单击侦听器: public void onClick(视图v){ //单击后执行操作 Context=getApplicationContext(); CharSequence text=“播放主题”; int duration=Toast.LENGTH\u SHORT; //这是播放声音时替换的图像 imgSheep.setImageResource(R.drawable.replaced

我有一个应用程序,它可以替换图像并在点击按钮时播放声音,我想做的是在声音停止播放后恢复到原始图像

我的按钮单击侦听器:

public void onClick(视图v){
//单击后执行操作
Context=getApplicationContext();
CharSequence text=“播放主题”;
int duration=Toast.LENGTH\u SHORT;
//这是播放声音时替换的图像
imgSheep.setImageResource(R.drawable.replacedimage);
Toast.makeText(上下文、文本、持续时间).show();
播放声音(R.drawable.sound);
}
我的声音播放功能:

//播放声音文件
专用void播放声音(int-sFile){
//设置MediaPlayer
最终int medFile=sFile;
Thread Thread=新线程(new Runnable(){
公开募捐{
playSound=MediaPlayer.create(getApplicationContext(),medFile);
playSound.start();
}
});
thread.start();
}
我知道我可以使用以下方法:

mp.setOnCompletionListener(新的OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
performOnEnd();
}
});
那么我可以这样做吗:

playSound.setOnCompletionListener(新的OnCompletionListener(){
@凌驾
完成后的公共空间(MediaPlayer播放声音){
imgSheep.setImageResource(R.drawable.originalimage);
}
});

你的问题在于你的线程。在playSound中,您将启动一个新线程,创建媒体播放器并播放声音。但是,您正在onCreate中设置onCompletionListener。这里有一个争用条件-如果新线程没有调度,并且在到达该行之前没有运行并设置mediaPlayer变量,则会导致NullPointerError崩溃


我建议把线丢了。MediaPlayer已经可以在后台播放,而不会挂起UI线程。

看起来您一般都知道该怎么做。那么您遇到了什么问题呢?我在onCreate实例中添加了一个,运行应用程序时出现了一个FC错误…从日志中发布堆栈跟踪,以及onCreate的代码。我的应用程序的pastebin链接我还想显示播放按钮,直到声音停止播放并重新启用它。