【发布时间】:2021-07-07 05:07:43
【问题描述】:
我有一个自定义视图。在这个视图中,我画了 4 个圆圈。这个视图有drawCirclesWithAnim()函数,我想用动画一个一个地画圆。
例如,首先绘制第一个圆圈,然后是第二个,然后是第三个......以此类推。如何通过自定义视图实现这一点?
由于是自定义视图,我认为我唯一的选择是ValueAnimator。目前,为了实现我的需要,我正在创建 4 个ValueAnimators。查看下面的代码:
CustomView.kt
private var mAnimValCircle1 = 0f //These values are used in "onDraw()".
private var mAnimValCircle2 = 0f
private var mAnimValCircle3 = 0f
private var mAnimValCircle4 = 0f
...
fun drawCirclesWithAnim(): {
ValueAnimator().apply {
duration = 200
addUpdateListener {
mAnimValCircle1 = it.animatedValue as Float
invalidate()
}
setFloatValues(0f, 1f)
start()
}
ValueAnimator().apply {
startDelay = 200
duration = 150
addUpdateListener {
mAnimValCircle2 = it.animatedValue as Float
invalidate()
}
setFloatValues(0f, 1f)
start()
}
ValueAnimator().apply {
startDelay = 350
duration = 150
addUpdateListener {
mAnimValCircle3 = it.animatedValue as Float
invalidate()
}
setFloatValues(0f, 1f)
start()
}
ValueAnimator().apply {
startDelay = 500
duration = 150
addUpdateListener {
mAnimValCircle4 = it.animatedValue as Float
invalidate()
}
setFloatValues(0f, 1f)
start()
}
}
如您所见,我正在手动计算延迟并确保每个动画在前一个动画完成后开始。不仅如此,我还在为每个圈子创建ValueAnimator。它工作正常。但我认为这不是完美的解决方案。
有没有办法从ValueAnimator 创建AnimationSet?或者,是否有其他解决方案可以解决此类情况?
【问题讨论】:
标签: android android-animation animator