Android Studio:单击按钮时逐个更新多个按钮的背景
我写这里是因为我在Android Studio中有一个非常烦人的问题。 我的“应用程序”非常简单,一页有13个按钮;我想要的只是简单的:当我点击第13个按钮时,逐一更新前十二个按钮。 我想看看按钮更新每个之间有一点点间隔,但我不明白如何去做。 我在“onClick”方法中尝试了很多技巧,但我无法弄清楚如何解决它;我得到的是,经过一段时间(所得到的时间加起来,我把这个功能加入了各种“睡眠”),所有的按钮同时变成了彩色。 我把我的最后一次尝试,但如果你有任何其他的方式做到这一点,我愿意改变继续前进的方式。Android Studio:单击按钮时逐个更新多个按钮的背景
int[] buttonIDs = new int[] {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7,
R.id.button8, R.id.button9, R.id.button10, R.id.button11, R.id.button12 };
int currentI = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button goButton = (Button) findViewById(R.id.button13);
goButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentI < buttonIDs.length) {
Button b = (Button) findViewById(buttonIDs[currentI]);
b.setBackgroundColor(Color.parseColor("#FF22FF"));
currentI++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread t = new Thread() {
public void run() {
goButton.performClick();
}
};
t.start();
}
}
});
}
这种尝试的结果是,第一个按钮变成彩色,然后我得到“应用程序已停止”错误的Android模拟器。
在此先感谢
这里的基本想法是,你需要创建一个新的线程,这标志着UI线程更新每个按钮。在每次更新之间,新线程需要等到UI有机会执行更新。我对这种事情不是很有经验。你可能很可能用Handler来做这件事。可能会有更多的高级工具可以使用,但我不确定。
你绝对不想睡觉UI线程。这只会导致界面无响应。
使用此
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 1000ms
}
}, 1000);
这似乎接近什么OP是寻找 –
谢谢你,男人,它的工作!你救了我:) – Andrew1410
你不应该睡在UI线程上。这只会阻止用户界面回应。 –
即使我将其删除,应用程序也会崩溃。除此之外,我需要一种方法让按钮一个接一个着色,因此我放了一个睡眠(我甚至试图在线程t的“运行”方法中放入“睡眠”,但它不会改变任何东西。 – Andrew1410
UI线程负责对按钮进行树更改,通过睡眠UI线程可以阻止这些更改的生效,所以这绝对不是正确的解决方案,请参阅下面的两个答案以获得一些建议,它们都不是完整的,但希望他们会帮助你在正确的方向 –