gpt4 book ai didi

java - 在非 UI 线程中编辑按钮的颜色 (Android)

转载 作者:行者123 更新时间:2023-11-30 08:58:38 25 4
gpt4 key购买 nike

我看过一些类似的问题并获得了一些信息,但他们不再羞于告诉我足够的信息以使其正常工作。

我想做的是制作一个简单的节奏游戏,让玩家定期(即节拍)点击一个按钮。我想通过让按钮改变颜色来设置一种何时点击的信号方式,因为这将是一个定期重复的任务,我想使用一个带有 schedule 方法的计时器对象。

但是当我尝试调用此方法时,它告诉我无法在非 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/

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