使用ExoPlayer播放媒体时Animation List动画无法启动的问题求助
ExoPlayer 搭配 AnimationDrawable 实现轮播图的问题解决
变量声明位置
直接在 Activity 中声明为 private lateinit var 即可,不要用伴生对象——静态变量会和视图生命周期冲突,容易引发异常:
private lateinit var sequenceAnimation: AnimationDrawable
动画启动的正确时机
不能在 onCreate 里直接调用 start(),此时 ImageView 还未完成绘制,AnimationDrawable 还没绑定到视图上。推荐两种可靠的启动方式:
方式一:利用 ImageView 的 post 方法
在视图绘制完成后再启动动画,确保资源已加载:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_player) // 初始化 ExoPlayer 逻辑... val carouselImageView = findViewById<ImageView>(R.id.carousel_image) // 注意是设置背景,不是前景图片 carouselImageView.setBackgroundResource(R.drawable.your_animation_list) sequenceAnimation = carouselImageView.background as AnimationDrawable // 视图绘制完成后启动动画 carouselImageView.post { sequenceAnimation.start() } }
方式二:重写 onWindowFocusChanged
当页面获取焦点时启动动画,适合需要页面可见就播放的场景:
override fun onWindowFocusChanged(hasFocus: Boolean) { super.onWindowFocusChanged(hasFocus) if (hasFocus && ::sequenceAnimation.isInitialized) { sequenceAnimation.start() } }
排查视频列表跳转异常问题
你之前遇到的「视频列表不显示、直接跳播放器」问题,大概率是动画初始化时的异常导致跳转逻辑出错,检查以下几点:
- 确认动画资源文件格式正确,
your_animation_list.xml必须包含循环标记和每个帧的时长:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <!-- false 表示循环播放 --> <item android:drawable="@drawable/img_slide_1" android:duration="2500"/> <item android:drawable="@drawable/img_slide_2" android:duration="2500"/> <item android:drawable="@drawable/img_slide_3" android:duration="2500"/> </animation-list> - 必须用
setBackgroundResource设置动画资源,不要用setImageResource——AnimationDrawable 是作为背景层工作的。 - 检查列表页面代码,有没有误触发播放器页面的跳转逻辑(比如提前初始化了播放器相关代码导致异常跳转)。
生命周期优化
为避免后台耗电,记得在 Activity 生命周期中管理动画状态:
override fun onPause() { super.onPause() if (::sequenceAnimation.isInitialized && sequenceAnimation.isRunning) { sequenceAnimation.stop() } } override fun onResume() { super.onResume() if (::sequenceAnimation.isInitialized && !sequenceAnimation.isRunning) { sequenceAnimation.start() } }
内容的提问来源于stack exchange,提问作者joaco bona
相关产品推荐
相关产品推荐

