Android: ValueAnimator 闪烁颜色这么快?
Android: ValueAnimator Flashes Colors So Quickly?
我正在使用 属性 动画师 ValueAnimator 来制作徽标颜色变化的动画。动画有效,但颜色闪烁得如此之快。如何控制它们,让颜色变化缓慢而平滑?
这是我使用的代码:
private void animateLogo(){
ImageView imgLogo = findViewById(R.id.imgview_logo);
ValueAnimator animator = ValueAnimator.ofArgb();
animator.setDuration(5000);
animator.setEvaluator(new ArgbEvaluator());
animator.setIntValues(R.color.colorGoldNew,
R.color.dbIndex0,
R.color.dbIndex5,
R.color.dbIndex6);
animator.addUpdateListener(animation ->
imgLogo.setColorFilter(getResources().getColor((int) animator.getAnimatedValue()))
);
animator.start();
}
ArgbEvaluator
evaluates 基于表示颜色的32位int值。您当前使用的是 R class ID int 值,我怀疑它会扰乱评估器。
我已经通过 getColor()
使用了相应的 int 颜色值
private void animateLogo(){
ImageView imgLogo = findViewById(R.id.imageView);
ValueAnimator colorAnim = ValueAnimator.ofInt(getColor(R.color.colorGoldNew),getColor(R.color.dbIndex0),getColor(R.color.dbIndex5),getColor(R.color.dbIndex6));
colorAnim.setDuration(5000);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.addUpdateListener(valueAnimator -> imgLogo.setColorFilter((int)colorAnim.getAnimatedValue()) );
colorAnim.start();
}
结果:
我正在使用 属性 动画师 ValueAnimator 来制作徽标颜色变化的动画。动画有效,但颜色闪烁得如此之快。如何控制它们,让颜色变化缓慢而平滑?
这是我使用的代码:
private void animateLogo(){
ImageView imgLogo = findViewById(R.id.imgview_logo);
ValueAnimator animator = ValueAnimator.ofArgb();
animator.setDuration(5000);
animator.setEvaluator(new ArgbEvaluator());
animator.setIntValues(R.color.colorGoldNew,
R.color.dbIndex0,
R.color.dbIndex5,
R.color.dbIndex6);
animator.addUpdateListener(animation ->
imgLogo.setColorFilter(getResources().getColor((int) animator.getAnimatedValue()))
);
animator.start();
}
ArgbEvaluator
evaluates 基于表示颜色的32位int值。您当前使用的是 R class ID int 值,我怀疑它会扰乱评估器。
我已经通过 getColor()
private void animateLogo(){
ImageView imgLogo = findViewById(R.id.imageView);
ValueAnimator colorAnim = ValueAnimator.ofInt(getColor(R.color.colorGoldNew),getColor(R.color.dbIndex0),getColor(R.color.dbIndex5),getColor(R.color.dbIndex6));
colorAnim.setDuration(5000);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.addUpdateListener(valueAnimator -> imgLogo.setColorFilter((int)colorAnim.getAnimatedValue()) );
colorAnim.start();
}
结果: