Как приостановить выполнение кода Android Studio - PullRequest
0 голосов
/ 05 января 2019

Итак, я создаю игру «Симон говорит», и мне интересно, как вы приостанавливаете код в Android Studio. У меня есть метод, который меняет цвет кнопки и меняет его обратно.

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

Это метод, о котором я говорю

public int[] showPattern(final Button[] colours, int score) {
    int[] pattern = new int[score + 1];
    Random rand = new Random();

    for (int j=0;j<score + 1;j++) {
        pattern[j] = rand.nextInt(4);



        switch (pattern[j]) {
            case 0:
                new CountDownTimer(2000,2000) {
                    public void onTick(long millisUntilFinished) {
                        colours[0].setBackgroundColor(getColor(R.color.lightGreen));
                    }


                    public void onFinish() {
                        colours[0].setBackgroundColor(getColor(R.color.green));
                    }
                }.start();
                break;



            case 1:
                new CountDownTimer(2000,2000) {
                    public void onTick(long millisUntilFinished) {
                        colours[1].setBackgroundColor(getColor(R.color.lightBlue));
                    }
                    public void onFinish() {
                        colours[1].setBackgroundColor(getColor(R.color.blue));
                    }
                }.start();
                break;

            case 2:
                new CountDownTimer(2000,2000) {
                    public void onTick(long millisUntilFinished) {
                        colours[2].setBackgroundColor(getColor(R.color.lightRed));
                    }
                    public void onFinish() {
                        colours[2].setBackgroundColor(getColor(R.color.red));
                    }
                }.start();
                break;


            case 3:
                new CountDownTimer(2000,2000) {
                    public void onTick(long millisUntilFinished) {
                        colours[3].setBackgroundColor(getColor(R.color.lightPurple));
                    }
                    public void onFinish() {
                        colours[3].setBackgroundColor(getColor(R.color.purple));
                    }
                }.start();
                break;
        }
    }
    return pattern;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...