Fixing missing cancel on infinite ObjectAnimators

This commit is contained in:
Maxime NATUREL 2022-07-28 10:00:07 +02:00
parent 050c23b578
commit fbd1009ebc

View file

@ -42,6 +42,7 @@ class TypingMessageDotsView(context: Context, attrs: AttributeSet) :
} }
private val circles = mutableListOf<View>() private val circles = mutableListOf<View>()
private val objectAnimators = mutableListOf<ObjectAnimator>()
init { init {
orientation = HORIZONTAL orientation = HORIZONTAL
@ -76,15 +77,17 @@ class TypingMessageDotsView(context: Context, attrs: AttributeSet) :
} }
private fun animateCircle(index: Int, circle: View) { private fun animateCircle(index: Int, circle: View) {
ObjectAnimator.ofFloat(circle, "alpha", DEFAULT_MAX_ALPHA, DEFAULT_MIN_ALPHA).apply { val objectAnimator = ObjectAnimator.ofFloat(circle, "alpha", DEFAULT_MAX_ALPHA, DEFAULT_MIN_ALPHA).apply {
duration = DEFAULT_CIRCLE_DURATION duration = DEFAULT_CIRCLE_DURATION
startDelay = DEFAULT_START_ANIM_CIRCLE_DURATION * index startDelay = DEFAULT_START_ANIM_CIRCLE_DURATION * index
repeatCount = ValueAnimator.INFINITE repeatCount = ValueAnimator.INFINITE
}.start() }
objectAnimators.add(objectAnimator)
objectAnimator.start()
} }
override fun onDetachedFromWindow() { override fun onDetachedFromWindow() {
super.onDetachedFromWindow() super.onDetachedFromWindow()
circles.forEach { it.clearAnimation() } objectAnimators.forEach { it.cancel() }
} }
} }