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

Android中View Binding调用动画失效问题求助

问题原因:View Binding调用动画无效,findViewById却正常的根源

核心问题:重复调用setContentView

你在onCreate里犯了一个关键错误:连续调用了两次setContentView:

  • 首先通过binding = ActivityMainBinding.inflate(layoutInflater)创建了View Binding对应的视图树,并调用setContentView(binding.root)将其设置为界面内容。
  • 但紧接着又调用setContentView(R.layout.activity_main),这会完全替换掉之前的视图树,加载一个全新的、与View Binding无关的布局实例。

这就导致:

  • binding.tvLogo对应的是第一个未被显示的视图树里的TextView,这个视图根本不在屏幕上,所以调用它的startAnimation自然看不到效果。
  • 而findViewById(R.id.tvLogo)是从第二个被实际显示的视图树中获取的TextView,所以动画能正常运行。

修复方案

删掉重复的setContentView(R.layout.activity_main),只保留View Binding对应的视图设置,修改后的MainActivity.kt代码如下:

class MainActivity : AppCompatActivity() {

    //Binding
    lateinit var binding: ActivityMainBinding

    //Variables
    lateinit var topAnimation: Animation

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        topAnimation = AnimationUtils.loadAnimation(applicationContext, R.anim.logo_animation)
        // 现在可以正常工作了
        binding.tvLogo.startAnimation(topAnimation)
    }
}

内容的提问来源于stack exchange,提问作者Roy Richard Flores Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:03:53