我们在使用属性动画时,对某自定义控件需要进行颜色的渐变。而不是突然改变。颜色的16进制算法太过繁琐。推出如下简单算法
首先我们可以自己定义一个Color类,来定义画笔paint的颜色
public int color;
public void setColor(int color) {
this.color = color;
paint.setColor(color);
}
public int getColor() {
return color;
}
并且重写有参无参构造器
ObjectAnimator animColor = ObjectAnimator.ofObject(this,"color",new MyColorEvaluator(),Color.RED,Color.BLUE,Color.GRAY,Color.GREEN);
在定义动画方法是自己写了一个TypeEvaluator
private class MyColorEvaluator implements TypeEvaluator {
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
int startColor = (int) startValue;
int endColor = (int) endValue;
int alpha = (int) (Color.alpha(startColor) + fraction *
(Color.alpha(endColor) - Color.alpha(startColor)));
int red = (int) (Color.red(startColor) + fraction *
(Color.red(endColor) - Color.red(startColor)));
int green = (int) (Color.green(startColor) + fraction *
(Color.green(endColor) - Color.green(startColor)));
int blue = (int) (Color.blue(startColor) + fraction *
(Color.blue(endColor) - Color.blue(startColor)));
return Color.argb(alpha, red, green, blue);
}
}
在源码中,该方法返回的就是颜色的值。我们直接可以给画笔paint赋值
贴出效果图