Задержка повтора анимации в обратном режиме - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь добавить задержку к повторяющейся анимации, но startDelay не работает. Похоже, это нормально работает, когда анимация воспроизводится в первый раз.

val path = Path().apply {
    moveTo(imageView.x, imageView.y)
    lineTo(x.toFloat(), y.toFloat())
}
ObjectAnimator.ofFloat(imageView, View.X, View.Y, path).apply {
    duration = Random.nextLong(500, 1000)
    startDelay = 1000
    doOnEnd {
    startDelay = 3000
    } 
start()
}

Я также пробовал использовать Timer и Handler().postDelayed, но это даже не повторяется:

val path = Path().apply {
    moveTo(imageView.x, imageView.y)
    lineTo(x.toFloat(), y.toFloat())
}
ObjectAnimator.ofFloat(imageView, View.X, View.Y, path).apply {
    duration = Random.nextLong(500, 1000)
    startDelay = 1000
    doOnStart {
        Timer().schedule(object : TimerTask() {
            override fun run() {
                repeatCount = 1
                repeatMode = ValueAnimator.REVERSE
             }
        }, 3000)
    }
 start()
}

Как добиться повторения в обратном режиме с задержкой?

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать этот код для имитации задержки для анимации.

Пауза / задержка / возобновление сделает свое дело за вас.

val path = Path().apply {
    moveTo(imageView.x, imageView.y)
    lineTo(x.toFloat(), y.toFloat())
}

val delayBetweenRepeats = 2_000L

ObjectAnimator.ofFloat(imageView, View.X, View.Y, path).apply {
    duration = Random.nextLong(500, 1000)
    startDelay = 1000
    repeatCount = 5
    repeatMode = ValueAnimator.REVERSE
    doOnRepeat {
        pause()
        Timer().schedule(object : TimerTask() {
            override fun run() {
                runOnUiThread { resume() }
            }
        }, delayBetweenRepeats)
    }
    start()
}
...