Как заставить кнопку мигать в Android?

Если пользователь (в моей викторине) выбирает ложный ответ, кнопка с правильным ответом должна мигать зеленым. Пока я делал это так:

    if(answerTrue)
        for (int i = 0; i < 2000; i = i + 250) {
            handler.postDelayed(rbl_blinkNormal, i);
            i = i + 250;
            handler.postDelayed(rbl_blinkGreen, i);
        }

И бегуны: Зеленый:

 rbl_blinkGreen= new Runnable() {
     @Override
     public void run() {
         btn_richtig.setBackgroundResource(R.drawable.color_green_btn);
     }

 };

Обычный:

 rbl_blinkNormal= new Runnable() {
     @Override
     public void run() {
         btn_richtig.setBackgroundResource(R.drawable.color_black_btn);
     }

 };

Он работает нормально, но вот так я вызываю postDelayed () каждые 250 мс. Может ли это повлиять на производительность моего приложения и есть ли лучший способ сделать это?


person Mapi    schedule 30.04.2017    source источник


Ответы (2)


Вы можете анимировать свою кнопку, если установите для нее цвет ЗЕЛЕНЫЙ. Я имею в виду,

if(answerTrue){

    // Set the color of the button to GREEN once.

    // Next, animate its visibility with the set color - which is GREEN as follows:

    Animation anim = new AlphaAnimation(0.0f, 1.0f);
    anim.setDuration(50); //You can manage the blinking time with this parameter
    anim.setStartOffset(20);
    anim.setRepeatMode(Animation.REVERSE);
    anim.setRepeatCount(Animation.INFINITE);
    button.startAnimation(anim);
}

Точно так же вы можете оживить другую кнопку и остановить анимацию, когда захотите.

Источник: мигающий текст в представлении Android

person Manish Kumar Sharma    schedule 30.04.2017

Если вы хотите только мигать изображением, вот пример.

Button bt_notes = (Button) findViewById(R.id.bt_notes);
int bt_notes_blink = 0;

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                int DrawableImage[] = {R.drawable.picto_keys, R.drawable.picto_blank};
                Resources res = getApplicationContext().getResources();
                bt_notes.setCompoundDrawablesWithIntrinsicBounds(null, null, null, res.getDrawable(DrawableImage[bt_notes_blink]));
                bt_notes_blink++;
                if (bt_notes_blink == 2) { bt_notes_blink = 0; }
                handler.postDelayed(this, 500);
            }
        });
    }
}, 0);
person Jerry    schedule 27.04.2019