Использование CountDownTimer и Queue вместе

Я работаю над паттерном Simon Says. Игрок должен повторить все более длинный паттерн, пока он не испортит. Игра состоит из сетки цветов 2х2, за каждой из которых стоит более темная. Изменяя альфа с 1--->0---->1. Я даю эффект нажатия.

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

Полезная информация:

  • Шаблон - это массив, в котором я храню шаблон, который должен повторить пользователь.

  • getColorById возвращает соответствующий ImageView для каждого цвета [0-3]

TLDR:

  • Мне нужно прошить каждый отдельный элемент в arrayList с именем pattern, чтобы игрок мог его увидеть и повторить, но в настоящее время он пропускает последний элемент, и если повторяется один и тот же элемент, он просто мигает, а не мигает дважды.

РЕДАКТИРОВАТЬ: Иногда, последний элемент в последовательности действительно показывает, но это очень случайно, показывает ли он или нет.

    public void flashPattern(View view){
    final Queue<Integer> queue = new LinkedList<>(pattern);
    final int timeBetweenSteps = 500;
    new CountDownTimer(pattern.size() * timeBetweenSteps, timeBetweenSteps) {
        private ImageView lastLight = null;

        @Override
        public void onTick(long millisUntilFinished) {
            if (lastLight != null) {
                lastLight.animate().alpha(1f).setDuration(250);
            }
            lastLight = getColorById(queue.remove());
            lastLight.animate().alpha(0f).setDuration(250);

        }

        @Override
        public void onFinish() {
            if (lastLight != null) {
                lastLight.animate().alpha(1f).setDuration(250);
            }
        }
    }.start();
}

0 ответов

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