我正在使用这个库来生成渐变:https : //github.com/revely-inc/co.revely.gradient
为渐变设置动画的 kotlin 代码如下:
val color1 = Color.parseColor("#00c6ff")
val color2 = Color.parseColor("#ff72ff")
val valueAnimator = ValueAnimator.ofFloat(0f, 360f)
valueAnimator.duration = 15000
valueAnimator.repeatCount = ValueAnimator.INFINITE
valueAnimator.interpolator = LinearInterpolator()
RevelyGradient.sweep()
.colors(intArrayOf(color1, color2, color1))
.animate(valueAnimator, { _valueAnimator, _gradientDrawable ->
_gradientDrawable.angle = _valueAnimator.animatedValue as Float
})
.onBackgroundOf(container)
valueAnimator.start()
到目前为止我得到的java代码:
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.ofFloat(0f, 360f);
valueAnimator.setDuration(15000);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setInterpolator(new LinearInterpolator());
RevelyGradient.sweep()
.colors(new int[] {Color.parseColor("#FF2525"), Color.parseColor("#6078EA")})
.animate(valueAnimator, { _valueAnimator, _gradientDrawable ->
_gradientDrawable.angle = _valueAnimator.animatedValue as Float
})
.onBackgroundOf(rootView);
valueAnimator.start();
正如您所注意到的,我无法转换它(因为它对 kotlin 局外人没有意义):
{ _valueAnimator, _gradientDrawable ->
_gradientDrawable.angle = _valueAnimator.animatedValue as Float
}
在这里应该做什么?
错误:
要求:'kotlin.jvm.functions.Function2?超级 android.animation.ValueAnimator,?super co.revely.gradient.drawables.Gradient,kotlin.Unit>
这是一个匿名函数(一个“lambda 表达式”)。看起来RevelyGradient.animate()
需要两个参数:
在您传入的特定函数中,Gradient 的angle
属性是从 ValueAnimator 的 animationValue属性设置的(在赋值之前被转换为Float)。
那么你如何用 Java 重写它呢?由于这是一个 Android 问题,您需要为您正在处理的模块启用 Java 8 语言功能。然后你应该能够重写那行代码,看起来像这样:
RevelyGradient
.animate(valueAnimator,
(_valueAnimator, _gradientDrawable) -> {
_gradientDrawable.setAngle((Float) _valueAnimator.getAnimatedValue());
return Unit.INSTANCE;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句