我见过一些类似的问题并获得了一些信息,但他们并没有羞于告诉我足以让它发挥作用的信息。
我想做的是制作一个简单的节奏游戏,玩家定期点击按钮(即节拍)。我想设置一种通过让按钮改变颜色来指示何时点击的方法,并且由于这将是定期重复的任务,所以我想使用带有计划方法的计时器对象。
但是当我尝试调用此方法时,它告诉我无法在非 UI 线程中更改 UI。我尝试了几种方法在主线程中编写一个可以从计时器对象调用的方法,但每次都会遇到相同的错误。我假设我只是对 UI 线程中的内容有错误的想法,所以我希望有人能够澄清它。
这是我尝试的一种方法的 fragment ,只是为了展示我的代码的样子:
OnClickListener clickButton = new View.OnClickListener() {
public void onClick(View v) {
if (startBeat == 0){
startBeat = System.nanoTime();
timerStart.scheduleAtFixedRate((new TimerTask()
{
public void run()
{
flashButton();
}
}), 0, beatTime);
timerEnd.schedule(new TimerTask()
{
public void run()
{
unflashButton();
}
}, beatTolerance*2, beatTime);
return;
}
};
public void flashButton(){
beatPrompt.setBackgroundColor(getResources().getColor(R.color.primary1transparent_very));
}
public void unflashButton(){
beatPrompt.setBackgroundColor(getResources().getColor(R.color.primary1));
}
需要明确的是,这全部包含在我的 MainActivity 类以及 OnCreate 类中。
最佳答案
如果你在一个 Activity 中,你需要做的就是使用 runOnUiThread()
,然后放置代码来更改 ui 元素
public void flashButton(){
runOnUiThread(new Runnable() {
@Override
public void run() {
beatPrompt.setBackgroundColor(getResources().getColor(R.color.primary1transparent_very));
}
});
}
关于java - 在非 UI 线程中编辑按钮的颜色 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27549763/