Зацикливание AnimationSet вызывает StackOverflowError - PullRequest
0 голосов
/ 03 марта 2019

Я разрабатываю приложение для Android, в котором у меня есть бесконечно повторяющаяся анимация, которая вызывает ошибку StackOverflowError.Это происходит, когда запускается другая анимация на том же объекте.

private fun pulse() {
    val randomGenerator = Random()

    val durationx = randomGenerator.nextInt(4000) + 1500

    val inflateX = ObjectAnimator.ofFloat(mContentView, "scaleX", 1.3f).apply {
        duration = durationx.toLong()
    }
    val inflateY = ObjectAnimator.ofFloat(mContentView, "scaleY", 1.3f).apply {
        duration = durationx.toLong()
    }
    val deflateX = ObjectAnimator.ofFloat(mContentView, "scaleX", 1.0f).apply {
        duration = durationx.toLong()
    }
    val deflateY = ObjectAnimator.ofFloat(mContentView, "scaleY", 1.0f).apply {
        duration = durationx.toLong()
    }
    val rotate = ObjectAnimator.ofFloat(mContentView, "rotation", 1.0f).apply {
        duration = durationx.toLong()
    }
    val soulToButton = AnimatorSet().apply {
        play(inflateX).with(inflateY)
        play(rotate).with(inflateX)
        play(deflateX).after(inflateX)
        play(deflateY).after(inflateY)
        start()
    }

    soulToButton.addListener(object: AnimatorListenerAdapter() {
        override fun onAnimationEnd(animation: Animator) {
            super.onAnimationEnd(animation)
            soulToButton.start() // stacktrace points to this line as cause for the error.
        }
    })
    soulToButton.start()

    AnimatorSet().apply {
        play(soulToButton)
        start()
    }
}

Я попытался изменить функцию на fun pulse(stop: boolean), вызвать pulse(false) для запуска импульса и pulse(true) до запуска другой анимации и добавить if (stop) {soulToButton.cancel()} в нескольких местах.Я также попытался обернуть строку, вызвав ошибку, как это: while(stop == false){soultoButton.start()}

Все это не помогло.

...