ボタンの背景を変更してスリープする

私はボタンの背景を赤に変えて、もう1秒間待ってから別のアクティビティを呼びたいと思っています。

これは私のコードです:

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

問題は、アプリケーションが1秒間スリープしてアクティビティを開始するが、ボタンの色は変わらないということです。これをどうすれば解決できますか?

1

3 答え

あなたが使うとき SystemClock.sleep(1000);

ルーパーを扱うメインスレッドはスリープ状態になります。

そしてそれが返ってくると、最初に色を変えて、アクティビティを開始します。遅れることなく次々に行われるので、変更された色を見ることができません。

ハンドラpostDelayedを使用すると、必要な遅延の後でアクティビティを実行するのに役立ちます。また、スリープ状態でメインルーパースレッドをブロックしません

2
追加された

いいえ、それは色を設定していますが、あなたはそれを見ることができません。なぜあなたが見ることができないのかを説明します。

色は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
            }
       });

私はこの問題を克服する方法を知らない。私はちょうどこれを知らせるために答えた。

0
追加された
ご回答有難うございます。私は、ボタンの色が赤いときに壊れるwhileループを試したかったのですが、これを確認する方法はわかりません。 ColorDrawableクラスのgetColor()メソッドを使用しようとすると、eclipseはこのメソッドが存在しないことを示します。ボタンの背景色を確認する別の方法を知っていますか?
追加された 著者 user1186043,

スリープしている同じスレッドの色を設定しているため、スリープコマンドによってUIがフリーズするため、変更が表示されません。

色を設定してから、5秒間待機してから別のアクティビティを起動する新しいスレッドを生成する必要があります。

0
追加された