今天我开始编写一个简单的android应用程序。想法是当按下按钮时调用方法“click(View v)”,在1秒后将TextField的背景改为随机颜色,让我们说30次
(长话短说:30种不同的背景颜色以1秒的间隔变化)。
这就是我所拥有的:
public void click(View v) {
for(int i = 0; i >= 30; i++){
Random rand = new Random();
final int red = rand.nextInt(255);
final int green = rand.nextInt(255);
final int blue = rand.nextInt(255);
final TextView tf = (TextView) findViewById(R.id.textView1);
// SLEEP 1 SECOND HERE ...
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
tf.setBackgroundColor(Color.rgb(red, green, blue));
}
}, 1000);
}
}
但是当我按下按钮时没有任何反应。作为初学者,我将非常感谢任何建议如何解决这个问题。
答案 0 :(得分:0)
尝试调用tf.invalidate()强制重绘。
此外,如果您希望它每秒更新30秒,您应该将1000更改为i * 1000(而不是像评论所暗示的那样睡觉)。正如目前所写的所有postDelayed几乎同时结束。
你也可以在循环之外移动处理程序的创建,不需要创建倍数。
答案 1 :(得分:0)
3个小时后我终于解决了这个问题。 for循环标题中有一个错误。 正好在 i&gt; = 30 。写得像这样,循环中的代码永远不会启动。它必须 i <= 30 。多么愚蠢的错误-_-
所以代码现在看起来像这样:
public void click(View v) {
Handler handler = new Handler();
final Random rand = new Random();
for(int i=1; i <= 30; i++){
handler.postDelayed(new Runnable() {
public void run() {
int red = rand.nextInt(255);
int green = rand.nextInt(255);
int blue = rand.nextInt(255);
TextView tf = (TextView) findViewById(R.id.textView1);
tf.setBackgroundColor(Color.rgb(red, green, blue));
}
}, i * 1000);
}
}
它正在工作!