1

我想将按钮的背景更改为红色,然后在调用另一个活动之前等待一秒钟。

这是我的代码:

btn1.setBackgroundColor(Color.RED);
SystemClock.sleep(1000);
startActivity(intent);

问题是应用程序休眠一秒钟并启动活动,但按钮的颜色没有改变。我怎样才能解决这个问题?

4

3 回答 3

2

当您使用 SystemClock.sleep(1000);

处理 Looper 的主线程进入睡眠状态。

然后当它返回时,它首先更改颜色,然后启动 Activity。这是一个接一个地完成的,没有延迟,所以你看不到改变的颜色。

使用处理程序 postDelayed 这将帮助您在您需要的延迟后运行活动,并且也不会通过睡眠阻塞主循环器线程

于 2012-02-06T13:44:51.043 回答
0

不,它正在设置颜色,但您看不到。我会解释为什么你看不到。

颜色在 1 秒后设置。但是你在 1 秒后开始新的活动,所以你看不到颜色的变化。实际上睡眠暂停了线程给定的时间。

要注意这种效果,请尝试以下代码。

       btn1.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) {
                v.setBackgroundColor(Color.RED); 
                SystemClock.sleep(5000); // color will set after 5 seconds
            }
       });

我不知道如何克服这个问题。我回答只是为了告知这一点。

于 2012-02-06T12:02:28.897 回答
0

您正在休眠的同一线程上设置颜色,因此您的更改不可见,因为 sleep 命令会导致 UI 冻结。

您应该设置颜色,然后生成一个新线程,该线程将在启动其他活动之前等待 5 秒。

于 2012-02-06T12:32:07.177 回答