反向重复播放动画

问题描述 投票:0回答:1

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

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

java android kotlin android-activity android-animation
1个回答
0
投票

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

暂停/延迟/恢复将为您解决问题。

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()
}
© www.soinside.com 2019 - 2024. All rights reserved.