layout.setBackgroundColor(Color.GREEN);
try {
Thread.sleep(1250);
} catch (InterruptedException e) {
e.printStackTrace();
}
layout.setBackgroundColor(Color.BLUE);
Я хочу сначала изменить BackgroundColor моего макета на зеленый, а через 1,25 секунды он должен стать синим. Цвет фона меняется на синий через 1,25 секунды, но не становится зеленым раньше. Как я могу это исправить?




Вы переводите основной поток (поток пользовательского интерфейса) в спящий режим, что вызывает проблему.
Попробуй это
layout.setBackgroundColor(Color.GREEN);
layout.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
Убедитесь, что layout объявлен окончательным.
Вы только что дважды изменили цвет фона. Таким образом, он считается только вашим последним цветом СИНИЙ.
вы должны сделать что-то подобное.
layout.setBackgroundColor(Color.GREEN);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
Попробуйте обработчик вот так:
layout.setBackgroundColor(Color.GREEN);
Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
},1250);
Никогда не делайте Thread.sleep () в потоке пользовательского интерфейса.
Это то, что изначально является причиной проблемы.
вы можете использовать это, чтобы спать, например. фоновый поток.
Это решение Handler имеет два преимущества:
(1) избегает накладных расходов системы на 2-й поток,
(2) работает в потоке пользовательского интерфейса, поэтому может вносить изменения в пользовательский интерфейс, не вызывая исключения.