在反向模式下延迟重复动画

Delay repeat animation in reverse mode

我正在尝试为重复动画添加一些延迟,但 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()
}

我也尝试使用 TimerHandler().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()
}

如何实现延迟反向模式的重复?

您可以使用此代码来模拟动画的延迟。

pause/delay/resume 将为您解决问题。

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()
}