Когда вы запускаете команду анимации в виде, который частично находится за пределами экрана, запускается анимация и вызывается onStartListener, но анимация не запускается полностью (каким-то образом она прерывается в середине).Я предполагаю, что, поскольку представление находится за пределами экрана, оно отменяется, и, следовательно, его onFinish не вызывается.В качестве обходного пути для этого я создал собственный слушатель анимации, который запускается как обработчик и использует postDelayed для уведомления пользователя о событии окончания анимации.В Kotlin:
abstract class PartiallyOffScreenAnimationListener : Animation.AnimationListener, AnimationListener {
override fun onAnimationRepeat(animation: Animation?) {
onAnimationRepeat_(animation)
}
override fun onAnimationEnd(animation: Animation) {}
override fun onAnimationStart(animation: Animation) {
onAnimationStart_(animation)
Handler().postDelayed({
onAnimationEnd_(animation)
animation.setAnimationListener(null)
}, animation.duration + 50)
}
}
Обратите внимание, что в случае, если анимация не запускается полностью, представление может остаться в несовместимом состоянии (например, анимация параметров макета может привести к странному среднему интерполяторуФактор отбрасывается. По этой причине вы должны проверить в конце обратного вызова, что представление находится в требуемом состоянии. Если нет, просто установите его вручную.