Android: изменение цвета кнопок в шаблоне

1

Я пытаюсь реализовать что-то вроде Simon Says для Android. Это код, который у меня есть:

for(int i = 1; i <= sequence.size(); i++){
handler.postDelayed(new Runnable(){
                    public void run(){
                        if (sequence.peek() == 1){
                            green.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    green.setPressed(false);                
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 2){
                            red.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    red.setPressed(false);               
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 3){
                            yellow.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    yellow.setPressed(false);               
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 3){
                            blue.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    blue.setPressed(false);             
                                    }
                            }, 1000);
                        }
                        int myNum = sequence.peek();
                        sequence.poll();
                        sequence.add(myNum);
                    }
                }, 1000);
            }
}

В принципе, у меня есть очередь (последовательность), которая удерживает шаблон для мигания кнопок. (setPressed (true) - это другой цвет, чем setPressed (false)). В первый раз, когда он вызывается, есть только одна кнопка, которая должна менять цвета, чтобы она работала нормально. Во второй раз, когда он называется, 2 цвета кнопок должны измениться. Мой код сразу же загорится одновременно. Как сделать так, чтобы он сначала мигал одним цветом кнопки, закончил это, а затем мигал цвет второй кнопки? Я пробовал миллион разных вещей, и это все еще самое близкое, что я получил.

Теги:
button
colors
time
delay

1 ответ

0

Мое предположение было бы, не проверив никакого кода, что это из-за вашего цикла for. В принципе, он проходит через все последовательности и отправляет runnable обработчику с задержкой в 1000 миллисекунд.

Это означает: я равно 0: последовательность 1 начинается через 1000 миллисекунд; я равно 1: последовательность 1 начинается в 1000 миллисекунд; я 2....

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

Просто попробуйте установить задержку (i + 1) * 1000, чтобы каждая "кнопка" была активирована (на секунду), когда это "его время".

  • 0
    Это работает, за исключением случаев, когда шаблон повторяет цвет. Например, если он дважды мигнет зеленым, он будет мигать только один раз. Есть идеи для этого? Спасибо!
  • 0
    Ну, это, вероятно, потому что он «мигает» в течение 1000 мс, затем ждет «0 мс» и сразу мигает снова в течение 1000 мс. Либо установите задержку на 1100 или 1200, либо уменьшите «время мигания».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню