使用ValueAnimator使TextView闪烁不同的颜色

我想使用ValueAnimator使TextView的文本颜色在两种不同颜色之间闪烁两次,但我想用XML创建animation。 我找不到任何例子。 任何帮助将不胜感激。

更新

下面的代码非常完美。 颜色从黑色变为蓝色,蓝色变为黑色,黑色变为蓝色,蓝色变为黑色,每次反向重复之间的颜色变为500ms。 然而,我试图从animator xml文件中使用它。

 ValueAnimator colorAnim = ObjectAnimator.OfInt(objectToFlash, "textColor", (int)fromColor, (int)toColor); colorAnim.SetDuration(500); colorAnim.SetEvaluator(new ArgbEvaluator()); colorAnim.RepeatCount = 3; colorAnim.RepeatMode = ValueAnimatorRepeatMode.Reverse; 

XML

  

 ValueAnimator anim = (ObjectAnimator)AnimatorInflater.LoadAnimator(Activity, Resource.Animator.blinking_text); anim.SetTarget(objectToFlash); 

使用xml会导致TextView文本颜色的颜色在500毫秒内变化多少次。

更新我认为我需要的是在xml中模仿OfInt调用以编程方式执行的操作的关键帧。 现在尝试这个,但到目前为止没有运气。

Solutions Collecting From Web of "使用ValueAnimator使TextView闪烁不同的颜色"

尝试这个:

 private static final int RED = 0xffFF8080; private static final int BLUE = 0xff8080FF; ValueAnimator colorAnim = ObjectAnimator.ofInt(myTextView, "backgroundColor", RED, BLUE); colorAnim.setDuration(3000); colorAnim.setEvaluator(new ArgbEvaluator()); colorAnim.setRepeatCount(ValueAnimator.INFINITE); colorAnim.setRepeatMode(ValueAnimator.REVERSE); colorAnim.start(); 

或者通过xml尝试这个未经测试的方法:* res / animator / property_animator.xml *

    

现在用Java代码:

 AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator); set.setTarget(myTextView); set.start(); 

您描述的问题是XML中指定的对象animation师没有正确地为颜色插值分配ArgbEvaluator。

要解决此问题,请根据需要创建对象animationXML以在颜色之间进行补间。 然后,在源代码中,执行以下操作以确保animation师使用的求值程序是ArgbEvaluator:

 ObjectAnimator colorAnimator = (ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.color_rotation); colorAnimator.setTarget(objectToFlash); colorAnimator.setEvaluator(new ArgbEvaluator()); colorAnimator.start(); 

从API LEVEL> 21开始,可以使用静态方法ObjectAnimator.ofArgb进行相同的效果,如下所示:

 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private void animateText(TextView text) { ObjectAnimator animator = ObjectAnimator.ofArgb(text, "textColor", Color.WHITE, Color.RED); animator.setDuration(500); animator.setRepeatCount(3); animator.setRepeatMode(ValueAnimator.REVERSE); animator.start(); }