Исчезающая анимация не остается исчезнувшей

#android #kotlin #animation

#Android #котлин #Анимация

Вопрос:

У меня есть простая функция анимации затухания для моего приложения для Android, она работает, но проблема, с которой я сталкиваюсь, заключается в том, что после запуска анимации затухания представление ( TextView в данном случае) не остается затухающим, alpha значение снова становится 1.

Вот код fadeOut функции:

  fun fadeOut(duration: Long = 100) : AlphaAnimation{
        val fadeOut = AlphaAnimation(1f, 0f)
        fadeOut.interpolator = DecelerateInterpolator()
        fadeOut.duration = duration
        return fadeOut
    }
 

И я использую его следующим образом:

 myTextView.startAnimation(fadeOut(500))
 

Любая помощь или совет будут высоко оценены.

Ответ №1:

Я думаю Animation::setFillAfter , что функция сделала бы это за вас, код был бы таким:

 val animation = fadeOut(500)
animation.fillAfter = true

myTextView.startAnimation(animation)

 

Хотя это решение сохраняет альфа-значение представления только после окончания анимации, если вы хотите изменить видимость представления, вам нужно изменить его, когда анимация заканчивается с помощью Animation.AnimationListener интерфейса, код будет выглядеть следующим образом:

 myTextView.startAnimation(fadeOut(500).apply {
    setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(animation: Animation?) {
        }
        override fun onAnimationEnd(animation: Animation?) {
            myTextView.visibility = View.GONE
        }
        override fun onAnimationRepeat(animation: Animation?) {
        }
    })
})
 

Ответ №2:

Вы можете установить видимость в обработчике после запуска анимации

 myTextView.startAnimation(fadeOut(500))
Handler().postDelayed({
        myTextView.visibility = View.GONE               
    },500)