我正在将音频声音加载到列表视图中,我播放它们。当音频播放完成后,我想更改该特定声音的暂停按钮再次播放按钮。 这是我播放声音的代码
soundChild.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
player.setDataSource(url);
// file.close();
player.prepare();
player.setLooping(false);
// player.start();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (player.isPlaying()) {
if (player != null) {
player.pause();
// Changing button image to play button
soundChild.setImageResource(R.drawable.playbutton);
}
} else {
// Resume song
if (player != null) {
player.start();
// Changing button image to pause button
soundChild.setImageResource(R.drawable.pausebutton);
}
}
}
});
player.setOnCompletionListener(new OnCompletionListener() {
@Override public void onCompletion(MediaPlayer mp) { // TODO
// Auto-generated method stub player.release(); player=null;
Toast.makeText(_context, "complete", Toast.LENGTH_LONG).show();
soundChild.setImageResource(R.drawable.playbutton);
player.reset();
} });
但是在完整的列表器上,播放器按钮的图像视图永远不会改回来再次播放图像视图。我不知道我在哪里做错了,因为如果调用onComplete,那么imageview背景也应该改变。请帮助。
答案 0 :(得分:0)
通常你必须在之前调用requestLayout:
soundChild.requestLayout();
soundChild.setImageResource(R.drawable.playbutton);
然后更改图像后
soundChild.invalidate();
你还能尝试什么?如果不起作用,您也可以尝试:
soundChild.setImageDrawable(context.getResources().getDrawable(R.drawable.playbutton));
因为,就像在setImageResource的API中描述的那样:
这可以在UI线程上进行Bitmap读取和解码 引起延迟打嗝
另外,它有可能,你必须在ui线程上调用它:
runOnUiThread(new Runnable() {
@Override
public void run() {
soundChild.setImageResource(R.drawable.playbutton);
}
});
并在onCompletion中调用它。