首页 > 解决方案 > 淡入淡出的字符串列表

问题描述

我对 android 开发很陌生,但目前正在开发一个应用程序。在我的登录页面上,我想让一系列字符串淡入,然后一个接一个地淡出。我一直在尝试使用 AlphaAnimation 并将其重复模式设置为 REVERSE,但我无法弄清楚如何在列表中的元素已经淡入然后淡出后更改文本。任何帮助将不胜感激。

基本上,我认为这个问题存在于 onAnimationRepeat() 函数中,我最终在其中更改了 TextView 的文本。由于 onAnimationRepeat() 函数会使文本淡出,我想我需要等待文本淡出才能更改文本。我是否需要一个 for 循环来遍历字符串列表并在每个字符串上单独运行动画?

请参阅下面的当前代码:

private fun animateLoginBanner() {
        var index = 0
        val bannerText = resources.getStringArray(R.array.login_banner)

        val anim: Animation = AlphaAnimation(0.0f, 1.0f)
        anim.duration = 1000
        anim.startOffset = 1000
        anim.repeatCount = bannerText.size - 1
        anim.repeatMode = Animation.REVERSE

        anim.setAnimationListener(object : Animation.AnimationListener {
            override fun onAnimationStart(animation: Animation?) {
                textView.text = bannerText[index]
            }

            override fun onAnimationEnd(animation: Animation?) {}

            override fun onAnimationRepeat(animation: Animation?) {
                index += 1
                textView.text = bannerText[index]
            }
        })

        textView.startAnimation(anim)
}

标签: androidkotlinandroid-animation

解决方案


未经测试,但也许您可以在侦听器中切换布尔值。您还需要将重复次数加倍。

        anim.setAnimationListener(object : Animation.AnimationListener {
            var isReversing = false

            override fun onAnimationStart(animation: Animation?) {
                textView.text = bannerText[index]
            }

            override fun onAnimationEnd(animation: Animation?) {}

            override fun onAnimationRepeat(animation: Animation?) {
                isReversing = !isReversing
                if (!isReversing) {
                    index += 1
                    textView.text = bannerText[index]
                }
            }
        })

推荐阅读