SetBackgroundColor игнорируется

   layout.setBackgroundColor(Color.GREEN);
    try {
        Thread.sleep(1250);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
   layout.setBackgroundColor(Color.BLUE);

Я хочу сначала изменить BackgroundColor моего макета на зеленый, а через 1,25 секунды он должен стать синим. Цвет фона меняется на синий через 1,25 секунды, но не становится зеленым раньше. Как я могу это исправить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
131
3

Ответы 3

Вы переводите основной поток (поток пользовательского интерфейса) в спящий режим, что вызывает проблему.

Попробуй это

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) работает в потоке пользовательского интерфейса, поэтому может вносить изменения в пользовательский интерфейс, не вызывая исключения.

Другие вопросы по теме