You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何延迟文本更新直至Animation动画执行完成?

解决Animation动画结束后再更新文本的问题

你可以通过给Animation设置动画监听器(AnimationListener),监听动画的结束事件,在动画完全执行完毕后再更新文本内容,具体实现如下:

方法一:使用AnimationListener

修改你的slideLeft方法,给加载的动画添加监听器,在onAnimationEnd回调中更新文本:

fun slideLeft() {
    val slideAnim = AnimationUtils.loadAnimation(context, R.anim.slide_out_left)
    slideAnim.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(animation: Animation?) {
            // 动画开始时的操作(可选)
        }

        override fun onAnimationEnd(animation: Animation?) {
            // 动画结束后更新文本
            questionText.text = "New Text coming here"
        }

        override fun onAnimationRepeat(animation: Animation?) {
            // 动画重复时的操作(可选)
        }
    })
    questionText.startAnimation(slideAnim)
}

方法二:使用ViewPropertyAnimator(更简洁的现代方式)

如果你不需要复用XML定义的动画,也可以直接用ViewPropertyAnimator实现滑动动画,它自带的withEndAction可以直接指定动画结束后的操作:

fun slideLeft() {
    questionText.animate()
        .translationX(-questionText.width.toFloat())
        .setDuration(Resources.getSystem().getInteger(android.R.integer.config_mediumAnimTime))
        .withEndAction {
            questionText.text = "New Text coming here"
            // 如果需要让文本重新滑入,可以在这里继续添加滑入动画
            questionText.animate().translationX(0f)
        }
}

注意点

  • 如果你使用XML动画,不要在调用startAnimation之后立刻更新文本,因为动画是异步执行的,立刻更新会导致文本提前显示。
  • 用ViewPropertyAnimator时,translationX的参数可以根据需求调整,-questionText.width.toFloat()对应XML里的-100%p效果。

内容的提问来源于stack exchange,提问作者P3W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:01:14