ボタンの背景を赤に変更してから、1秒待ってから別のアクティビティを呼び出します。
これは私のコードです:
btn1.setBackgroundColor(Color.RED);
SystemClock.sleep(1000);
startActivity(intent);
問題は、アプリケーションが1秒間スリープしてアクティビティを開始するが、ボタンの色が変わらないことです。どうすればこれを修正できますか?
ボタンの背景を赤に変更してから、1秒待ってから別のアクティビティを呼び出します。
これは私のコードです:
btn1.setBackgroundColor(Color.RED);
SystemClock.sleep(1000);
startActivity(intent);
問題は、アプリケーションが1秒間スリープしてアクティビティを開始するが、ボタンの色が変わらないことです。どうすればこれを修正できますか?
SystemClock.sleep(1000); を使用する場合
ルーパーを処理するメイン スレッドがスリープ状態になります。
そして、それが戻ってきたら、最初に色を変更してからアクティビティを開始します。これらは遅滞なく次々と行われるため、変更された色を見ることはできません。
Handler postDelayed を使用します。これは、必要な遅延の後にアクティビティを実行するのに役立ち、スリープによってメイン ルーパー スレッドをブロックすることもありません。
いいえ、色を設定していますが、それを見ることができません。なぜ見えないのか説明します。
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
}
});
この問題を克服する方法がわかりません。私はこれを知らせるためだけに答えました。
スリープ中の同じスレッドで色を設定しているため、sleep コマンドによって UI がフリーズするため、変更が表示されません。
色を設定してから、他のアクティビティを起動する前に 5 秒間待機する新しいスレッドを生成する必要があります。