Смена фона кнопки и сна - PullRequest
       52

Смена фона кнопки и сна

1 голос
/ 06 февраля 2012

Я хочу изменить фон кнопки на красный, а затем подождать одну секунду, прежде чем вызывать другое действие.

Это мой код:

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

Проблема в том, что приложение спит одну секунду и запускает действие, но цвет кнопки не меняется.Как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Когда вы используете SystemClock.sleep (1000);

ваш главный поток, который обрабатывает лупер, переходит в спящий режим.

А потом, когда он возвращается, он сначала меняет цвет, а затем запускает действие,которые выполняются один за другим без задержки, поэтому вы не можете видеть измененный цвет.

Использовать обработчик postDelayed, который поможет вам запустить действие после необходимой вам задержки и который также не блокирует основнойLooper Thread by sleep

0 голосов
/ 06 февраля 2012

Вы устанавливаете цвет в том же потоке, который спит, поэтому ваши изменения не видны, потому что команда sleep вызывает зависание пользовательского интерфейса.

Вы должны установить цвет, а затем создать новую нить, которая будет ждать 5 секунд, прежде чем приступить к другим действиям.

0 голосов
/ 06 февраля 2012

Нет, это настройка цвета, но вы не видите этого. Я объясню, почему вы не можете видеть.

Цвет устанавливается через 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
            }
       });

Я не знаю, как преодолеть эту проблему. Я ответил только, чтобы сообщить об этом.

...