Cuando se lanza animaciones con un retardo, se puede dar el caso que la vista ya no este disponible y al intentar associarle una animación puede devolver el error
Si el usuario cierra o rota el dispositivo en el momento exacto de asignar la animación a la vista, como está separada nos informará el siguiente error
java.lang.IllegalStateException: Cannot start this animator on a detached view!
Código Kotlin de Testeo
private var mHandler: Handler = Handler()
...
mHandler = Handler()
mHandler.postDelayed({
runAnimation()
}, 5000)
...
fun runAnimation() {
...
//ERROR java.lang.IllegalStateException: Cannot start this animator on a detached view!
anim = Animator...
anim.start()
}
Solución
Añadir comprobación de la vista está anclada en pantalla con el método isAttachedWindow
if (!isAttachedToWindow) return
val anim =
ViewAnimationUtils.createCircularReveal(view, cx, cy, initialRadius, 0F).apply {
interpolator = AccelerateDecelerateInterpolator()
//duration = 5000
}
anim.start()
Extraido de esa solución Cannot start this animator on a detached view! reveal effect