gpt4 book ai didi

android - 在 android 播放按钮上,图标不会改变,直到歌曲完全播放

转载 作者:行者123 更新时间:2023-11-30 04:50:51 24 4
gpt4 key购买 nike

我有一个图像按钮,它兼作播放和停止按钮。我需要按钮中的图像在用户第一次单击它时发生变化,以便它现在看起来像一个停止按钮。但这在线程完成播放歌曲之前不会发生。

ImageButton Sound;
public void onClick(View v) {
selectRandomSong();
Sound.setBackgroundResource(R.drawable.stop);
v.invalidate();
if(playing)
stop();
else
play();
Sound.setBackgroundResource(R.drawable.play);
}

setBackground 不会反射(reflect)在 View 上,因为不会发生失效。我应该在哪里以及如何使它无效?

最佳答案

我不确定 stop() 和 play() 是如何实现的,但根据您的描述,它们听起来像是阻塞了 UI 线程,因此按钮背景永远不会改变。在单独的线程中运行这些函数可以解决阻塞问题,但您只能在 UI 线程上更新后台资源。为了解决该问题,您可以使用 Activity.runOnUiThread() 调用。

此代码不是线程安全的(并且未经测试),但应该能为您提供一个良好的起点。

ImageButton Sound;
public void onClick(View v) {

//Kick off a new thread to play the song without blocking the UI thread
Thread playSongThread = new Thread() {
public void run() {
selectRandomSong();
setBackgroundResource(R.drawable.stop);
//v.invalidate(); //shouldn't be neccessary
if(playing)
stop();
else
play();
setBackgroundResource(R.drawable.play);
}
};
playSongThread.start();
}

/**
* Sets the background resource using the UI thread
* @param id Resource ID to set the background to
*/
private void setBackgroundResource(final int id)
{
this.runOnUiThread(new Runnable()
{
public void run()
{
Sound.setBackgroundResource(id);
}
});
}

关于android - 在 android 播放按钮上,图标不会改变,直到歌曲完全播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com