#android #animation #recursion #reverse
#Android #Анимация #Рекурсия #Обратная
Вопрос:
Как лучше всего изменить направление анимации на Android? Кроме того, я отслеживаю использование оперативной памяти в профилировщике, и результат был нормальным, как есть. Мне понравился приведенный ниже код:
var flagHeight: Int = 100
private fun startAnimation() {
val animation = tv_hello_world.animate().apply {
translationYBy(flagHeight.toFloat())
setListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator?) {
// do nothing
}
override fun onAnimationEnd(p0: Animator?) {
flagHeight = flagHeight.not()
startAnimation()
}
override fun onAnimationCancel(p0: Animator?) {
// do nothing
}
override fun onAnimationRepeat(p0: Animator?) {
// do nothing
}
})
duration = 1000
}
animation.start()
}
fun Int.not() = run { if (this > 0) -this else (this * -1) }
Ответ №1:
Правильный способ сделать это, используя ValueAnimator
вместо on PropertyAnimator
, поскольку у вас больше контроля над ним. Попробуйте это так:
val animator = ValueAnimator.ofFloat(0f, 100f).apply {
duration = 1000
repeatCount = ValueAnimator.INFINITE
repeatMode = ValueAnimator.REVERSE
addUpdateListener {
tv_hello_world.translationY = it.animatedValue as Float
}
}
animator.start()