2015-02-06 4 views
3

У меня есть кнопка, при нажатии которой я хочу, чтобы кнопка отображалась в flash путем переключения между двумя цветами фона.Android, установить цвет фона кнопки с анимацией?

This ответ использует AlphaAnimation сделать мигающую кнопку:

final Animation animation = new AlphaAnimation(1, 0); // Change alpha from fully visible to invisible 
    animation.setDuration(500); // duration - half a second 
    animation.setInterpolator(new LinearInterpolator()); // do not alter animation rate 
    animation.setRepeatCount(Animation.INFINITE); // Repeat animation infinitely 
    animation.setRepeatMode(Animation.REVERSE); // Reverse animation at the end so the button will fade back in 
    final Button btn = (Button) findViewById(R.id.your_btn); 
    btn.startAnimation(animation); 

Но я не мог заставить его работать с цветом фона.

Android-студия будет автоматически выполнить следующие действия:

animation = new Animation() { 
    @Override 
    public void setBackgroundColor(int bg) { 
     super.setBackgroundColor(bg); 
    } 
}; 

Но я пытался применить его к кнопке (с bg = Color.parseColor("#ffff9434")), но не кости.

Заранее спасибо.

EDIT

также попытался следующие, но он устарел и не работает (от here)

Button btn = (Button)this.findViewById(R.id.btn1); 
    //Let's change background's color from blue to red. 
    ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)}; 
    TransitionDrawable trans = new TransitionDrawable(color); 
    //This will work also on old devices. The latest API says you have to use setBackground instead. 
    btn.setBackgroundDrawable(trans); 
    trans.startTransition(5000); 

ETID 2

Понял работает, см ответ ниже

+0

Нашли решение и отправили ответ, но я уйду, так что у других людей есть четыре решения вместо трех. – Birrel

+0

ok sir, хорошо .. ........ – Elltz

ответ

4

Получил это! Спасибо за сообщение this!

final AnimationDrawable drawable = new AnimationDrawable(); 
final Handler handler = new Handler(); 

drawable.addFrame(new ColorDrawable(Color.RED), 400); 
drawable.addFrame(new ColorDrawable(Color.GREEN), 400); 
drawable.setOneShot(false); 

btn = (Button) view.findViewById(R.id.flashBtn); 

btn.setBackgroundDrawable(drawable); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     drawable.start(); 
    } 
    }, 100); 

Работает как очарование!

Смежные вопросы