Анимация фона LinearLayout для мерцания в Android - PullRequest
2 голосов
/ 17 февраля 2011

Вопрос очень простой, но мне не удается найти хорошее решение.У меня есть LinearLayout в моей деятельности.В зависимости от того, что пользователь делает, мне нужно заставить фон моего макета мигать 3 раза.Это означает, что он изменит цвет фона с прозрачного на красный и обратно 3 раза.Позвольте привести пример:

  1. пользователь получает вопрос и 2 кнопки с ответами
  2. пользователь нажимает неправильный ответ.Макет, содержащий кнопку, изменит свой фон (прозрачный - красный, прозрачный - красный, прозрачный - красный - прозрачный) три раза.

Как это сделать в Android?Спасибо.

Ответы [ 4 ]

3 голосов
/ 17 февраля 2011

Вы можете использовать обработчик с методом postDelayed.Это будет выглядеть примерно так:

    Handler h = new Handler();
    int count = 0;
    Runnable r=new Runnable()
    {
        public void run() 
        {
            if(count < 6){
                if(count % 2 == 0){
                    count++;
                    layout.setBackground(RED);
                    h.postDelayed(r,500);
                }else{
                    count++;
                    layout.setBackground(TRANSPARENT);
                    h.postDelayed(r,500);
                }
            }

        }

    };
    h.post(r);
3 голосов
/ 18 февраля 2011

@ vidstige: я попробовал ваши предложения, но смена фона происходила не быстро, иногда это работало, иногда наполовину, иногда -

@ Тим: ваше решение кажется очень хорошим, но у меня были некоторые проблемы с его работой, и, поскольку я не очень хорош в Java, я сдался.

Решение, которое работает, представляет собой сочетание принципов обоих ответов. Я не уверен, что он лучший, но в моем случае работает очень хорошо

        Handler blinkHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
                switch (msg.what) {
                case 0:
                    lay1.setBackgroundColor(Color.RED);
                        break;
                case 1:
                    lay1.setBackgroundColor(Color.TRANSPARENT);
                    break;

                }
                super.handleMessage(msg);
        }
    };


    for (int i=0; i<6; i++)
    {
        Message msg = new Message();
         if(i % 2 == 0){
             msg.what = 0;
         }
        else{
            msg.what=1;
        }

        blinkHandler.sendMessageDelayed(msg, i*300);
    }

Спасибо всем за ваше время.

1 голос
/ 17 февраля 2011

Используйте ScheduledThreadPoolExecutor , чтобы запланировать действие по изменению цвета фона, используя View.setBackgroundColor(int color) на красный / прозрачный.

Используя метод schedule(Runnable command, long delay, TimeUnit unit), вы можете запланировать все изменения цвета водин раз, и они будут выполнены позже в правильном порядке.

0 голосов
/ 03 января 2012

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

И если альтернативы нет вообще, я постараюсь поместить изображение .gif с чередующимися цветами.на заднем плане.

...