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
相关产品推荐
相关产品推荐

