Обратная анимация с рекурсивной функцией

#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()