Изменение цвета LinearLayout (плавная анимация) - PullRequest
0 голосов
/ 24 августа 2018

У меня есть LinearLayout с начальным background (скажем, #ff4455), и я хочу, чтобы цвет background сменился на другое значение при нажатии button в Плавном режиме (FADE) .. Как это сделать ..

ПРИМЕЧАНИЕ: у меня ЧЕТЫРЕ кнопки, каждая кнопка изменит фон на другой цвет ..

1 Ответ

0 голосов
/ 24 августа 2018

Использовать аниматор значений

int[] colors = new int[]{...} // create an array with colors for each button

button1.setOnClickListener(v -> updateBackgroundColor(0)); 
button2.setOnClickListener(v -> updateBackgroundColor(1)); 
button3.setOnClickListener(v -> updateBackgroundColor(2)); 
button4.setOnClickListener(v -> updateBackgroundColor(3)); 

private void updateBackgroundColor(int buttonPos) {
    Drawable background = view.getBackground();
    if (background instanceof ColorDrawable)
        color = ((ColorDrawable) background).getColor();
    int colorFrom = color == null ? defaultColor : color;
    int colorTo = colors[buttonPos];
    ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
    colorAnimation.setDuration(250); // milliseconds
    colorAnimation.addUpdateListener(new AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animator) {
            linearLayout.setBackgroundColor((int) animator.getAnimatedValue());
        }
});
colorAnimation.start();
}
...