短视频软件开发,各个图标自带渐变色效果
短视频软件开发,各个图标自带渐变色效果实现的相关代码
ColorGradient.java:
public class ColorGradient extends View {
public ColorGradient(Context context) {
super(context);
}
public ColorGradient(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
animation();
}
public ColorGradient(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void animation(){
ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", RED, BLUE);
colorAnim.setDuration(4000);
colorAnim.setEvaluator(new MyColorEvaluator());
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setRepeatMode(ValueAnimator.REVERSE);
colorAnim.start();
}
}
MyColorEvaluator.java:
public class MyColorEvaluator implements TypeEvaluator<Integer> {
float[] startHsv=new float[3];
float[] endHsv=new float[3];
float[] outHsv=new float[3];
@Override
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
Color.colorToHSV(startValue,startHsv);
Color.colorToHSV(endValue,endHsv);
int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);
// 计算当前动画完成度(fraction)所对应的颜色值
if (endHsv[0] - startHsv[0] > 180) {
endHsv[0] -= 360;
} else if (endHsv[0] - startHsv[0] < -180) {
endHsv[0] += 360;
}
outHsv[0] = startHsv[0] + (endHsv[0] - startHsv[0]) * fraction;
if (outHsv[0] > 360) {
outHsv[0] -= 360;
} else if (outHsv[0] < 0) {
outHsv[0] += 360;
}
outHsv[1]=startHsv[1]+(endHsv[1]-startHsv[1])*fraction;
outHsv[2]=startHsv[2]+(endHsv[2]-startHsv[2])*fraction;
return Color.HSVToColor(alpha,outHsv);
}
}
以上就是 短视频软件开发,各个图标自带渐变色效果实现的相关代码,更多内容欢迎关注之后的文章