解构类型为ObjectAnimator的声明初始化程序

时间:2019-02-18 08:15:23

标签: android kotlin objectanimator

我正在使用Kotlin解构声明。我之前将其与SpringAnimation一起使用,并且运行良好。现在,我想将其与ObjectAnimator一起使用,并且出现此错误:

  

解构类型为ObjectAnimator的声明初始化程序!必须具有“ component1()”功能

     

解构类型为ObjectAnimator的声明初始化程序!必须具有“ component2()”功能

这是我的代码:

val (xanimator, alphaanim) = findViewById<View>(R.id.imageView).let { img ->
            ObjectAnimator.ofFloat(img, "translationX", 100f).apply {
                duration = 2000
            }
            to
            ObjectAnimator.ofFloat(img, "alpha", 1.0f).apply {
                duration = 2000
            }
        }

怎么了?

1 个答案:

答案 0 :(得分:0)

这里的问题是,您不能在新行上开始infix调用函数调用-编译器实质上会推断出在您的第一个apply调用之后以分号/行结尾的行。这与运算符相同,例如see this issue

因此,您需要重新格式化代码以使to连接起来,就像这样:

val (xanimator: ObjectAnimator, alphaanim: ObjectAnimator) = findViewById<View>(R.id.imageView).let { img ->
    ObjectAnimator.ofFloat(img, "translationX", 100f).apply {
        duration = 2000
    } to
    ObjectAnimator.ofFloat(img, "alpha", 1.0f).apply {
        duration = 2000
    }
}

但是出于可读性考虑,也许您可​​以使用以下内容:

val (xanimator: ObjectAnimator, alphaanim: ObjectAnimator) = findViewById<View>(R.id.imageView).let { img ->
    Pair(
            ObjectAnimator.ofFloat(img, "translationX", 100f).apply {
                duration = 2000
            },
            ObjectAnimator.ofFloat(img, "alpha", 1.0f).apply {
                duration = 2000
            }
    )
}

或两者之间的任何内容。