Цвет кнопки «Саймон говорит» не вернется к нормальному состоянию после нажатия кнопки - PullRequest
0 голосов
/ 03 мая 2018
public void flashButton(int color) {
    final ImageView colors = findViewById(R.id.buttonsImage);
    final int newColor = color;

    Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            if(newColor == 1)
                colors.setImageResource(R.drawable.green_activated_png);
            if(newColor == 2)
                colors.setImageResource(R.drawable.yellow_activated_png);
            if(newColor == 3)
                colors.setImageResource(R.drawable.red_activated_png);
            if(newColor == 4)
                colors.setImageResource(R.drawable.blue_activated_png);

            System.out.println("Flashed color: " + newColor);
        }
    };
    handler.postDelayed(r, 1000);

    colors.setImageResource(R.drawable.normal_buttons);
    System.out.println("Returned Color.");
}

Цвет кнопки изменяется для каждой кнопки с помощью R.drawable.green_activation_png). Затем я меняю его обратно с помощью (R.drawable.normal_buttons). Я думаю, что моя проблема в handler.postDelayed (r, 1000). Но цвет не возвращается к нормальному после того, как пользователь нажимает правильный цвет.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я думаю, что функция неверна. Потому что после задержки метод выполняется через 1 секунду. Перед этим будет выполнен метод colors.setImageResource (R.drawable.normal_buttons). Измените поток, как показано ниже

public void flashButton(int color) {
final ImageView colors = findViewById(R.id.buttonsImage);
final int newColor = color;
        if(newColor == 1)
            colors.setImageResource(R.drawable.green_activated_png);
        if(newColor == 2)
            colors.setImageResource(R.drawable.yellow_activated_png);
        if(newColor == 3)
            colors.setImageResource(R.drawable.red_activated_png);
        if(newColor == 4)
            colors.setImageResource(R.drawable.blue_activated_png);

Handler handler = new Handler();
final Runnable r = new Runnable() {
    public void run() {
        colors.setImageResource(R.drawable.normal_buttons);
    }
};
handler.postDelayed(r, 1000);
}
0 голосов
/ 03 мая 2018

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

public void flashButton(int color) {
    final ImageView colors = findViewById(R.id.buttonsImage);
    final int newColor = color;
    if(newColor == 1)
        colors.setImageResource(R.drawable.green_activated_png);
    if(newColor == 2)
        colors.setImageResource(R.drawable.yellow_activated_png);
    if(newColor == 3)
        colors.setImageResource(R.drawable.red_activated_png);
    if(newColor == 4)
        colors.setImageResource(R.drawable.blue_activated_png);
    System.out.println("Flashed color: " + newColor);

    Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            colors.setImageResource(R.drawable.normal_buttons);
            System.out.println("Returned Color.");
        }
    };
    handler.postDelayed(r, 1000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...