Kotlin到Java(图书馆帮助)

我正在使用这个库来生成渐变: https : //github.com/revely-inc/co.revely.gradient

用于设置渐变animation的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,? 超级co.revely.gradient.drawables.Gradient,kotlin.Unit>

这是一个匿名函数(“lambdaexpression式”)。 它看起来像RevelyGradient.animate()有两个参数:

  1. 一个ValueAnimator 。
  2. 函数:将ValueAnimator和Gradient作为参数并返回没有用的函数。 (它返回一个单位 。)

在传入的特定函数中,渐变的angle属性是从ValueAnimator的animatedValue属性 (在赋值之前将其转换为Float )设置的。

那么如何用Java重写呢? 由于这是一个Android问题,因此您需要为正在使用的模块启用Java 8语言function 。 那么你应该可以重写这段代码,看起来像这样:

 RevelyGradient .animate(valueAnimator, (_valueAnimator, _gradientDrawable) -> { _gradientDrawable.setAngle((Float) _valueAnimator.getAnimatedValue()); return Unit.INSTANCE; });