我正在尝试为重复动画添加一些延迟,但是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()
}
如何实现延迟的反向模式重复?
您可以使用此代码来模拟动画的延迟。
暂停/延迟/恢复将为您解决问题。
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()
}