2016-12-06 3 views
0

Я пытаюсь создать плавную анимацию цвета в своем WaveView. Несчастливо анимация создает эффект радуги, распространяя все цвета от начала и до конца.Плавная цветовая анимация

Мне нужно, чтобы он переходил от красного к зеленому с помощью только красного (оранжевого) -> желтого - зеленого - зеленого цвета, как на таблицах RGB.

Вот мой ObjectAnimator:

ObjectAnimator waveColor = ObjectAnimator.ofInt(
      mWaveView, "waveColor",Color.parseColor("#64ff0000"),Color.parseColor("#6400ff00")); 

    waveColor.setDuration(7000); 
    waveColor.setInterpolator(new LinearInterpolator()); 
    animators.add(waveColor); 

Я понятия не имею, как сделать это, чтобы просто пройти через это цвета.

+0

написать свой собственный 'андроида. animation.TypeEvaluator ' – pskink

ответ

0

Проверить это Link:

Надежда Я понял ваш вопрос правильно, и это помогает

ColorDrawable[] color = {new ColorDrawable(Color.RED), new ColorDrawable(Color.GREEN)}; 
    TransitionDrawable trans = new TransitionDrawable(color); 
    //This will work also on old devices. The latest API says you have to use setBackground instead. 
    mWaveView.setBackgroundDrawable(trans); 
    trans.startTransition(7000); 
+0

Я не хочу менять цвет фона, но волны. Проблема в том, что WaveView принимает только ints как цвета. – user3653415

+0

Вы использовали какую-либо третью сторону для WaveView или сами создаете? –

+0

Я использую https://github.com/gelitenight/WaveView – user3653415

0

лучший способ использовать ValueAnimator и ColorUtils.blendARGB

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0.0f, 1.0f); 
valueAnimator.setDuration(325); 
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 

       float fractionAnim = (float) valueAnimator.getAnimatedValue(); 

       view.setColorBackground(ColorUtils.blendARGB(Color.parseColor("#FFFFFF") 
            , Color.parseColor("#000000") 
            , fractionAnim)); 
     } 
}); 
valueAnimator.start();