Как сделать переливающийся цвет?

У меня имеет CircleLineVisualizer, в параметре avColor которого мне надо передать цвет, который будет пульсировать. Подскажите, пожалуйста, как это сделать


Ответы (1 шт):

Автор решения: Sergei Buvaka

Вы можете попробовать ValueAnimator, чтоб получить такой результат.

final float[] from = new float[3],
              to =   new float[3];

Color.colorToHSV(Color.parseColor("#FFFFFFFF"), from);   // с белого цвета
Color.colorToHSV(Color.parseColor("#FFFF0000"), to);     // к красному

ValueAnimator anim = ValueAnimator.ofFloat(0, 1);   // анимация со значение 0 до 1
anim.setDuration(300);                              // длительность анимации 300 миллисекунд

final float[] hsv  = new float[3];                  // переходной цвет
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
    @Override public void onAnimationUpdate(ValueAnimator animation) {
        // Переход по каждой оси HSV (оттенок, насыщенность, значение)
        hsv[0] = from[0] + (to[0] - from[0])*animation.getAnimatedFraction();
        hsv[1] = from[1] + (to[1] - from[1])*animation.getAnimatedFraction();
        hsv[2] = from[2] + (to[2] - from[2])*animation.getAnimatedFraction();

        view.setBackgroundColor(Color.HSVToColor(hsv));
    }
});

anim.start(); 

HSV даст более приятный переход, чем цветовое пространство Android по умолчанию, потому что HSV описывает цвета в цилиндрических координатах, которые красиво разделяют свойства цвета и обеспечивают плавный переход по одной оси.

→ Ссылка