Инициализатор объявления уничтожения типа ObjectAnimator - PullRequest
0 голосов
/ 18 февраля 2019

Я использую декларации о разрушении 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 голосов
/ 18 февраля 2019

Проблема здесь в том, что вы не можете начать вызов функции инфиксного вызова на новой строке - компилятор по существу выводит точку с запятой / строку, заканчивающуюся после вашего первого apply вызова.То же самое с операторами: см., Например, эту проблему .

Поэтому вам нужно немного переформатировать код, чтобы подключить 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
            }
    )
}

Или что-нибудь промежуточное.

...