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