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

时间:2010-08-11 20:47:28

标签: android

我有一个图像按钮,可以兼作播放和停止按钮。当用户第一次点击按钮时,我需要更改按钮中的图像,以便它现在看起来像一个停止按钮。但是直到线程完成播放歌曲才会发生这种情况。

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不会反映视图,因为不会发生失效。我应该在哪里以及如何使其无效?

1 个答案:

答案 0 :(得分:1)

我不确定如何实现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);                
        }
    });
}