Android Splash screen启动页XML drawable内置加载动画不生效如何解决
你的动画不生效是因为AnimationDrawable作为layer-list的子项被加载时,系统不会自动触发播放逻辑,需要你手动在代码中启动动画,具体实现方案如下:
前置校验
首先确认@drawable/loading_animation是合法的逐帧动画资源(AnimationDrawable),存放在res/drawable目录下,示例格式参考:
<!-- res/drawable/loading_animation.xml 示例 --> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/loading_frame1" android:duration="100"/> <item android:drawable="@drawable/loading_frame2" android:duration="100"/> <!-- 补充其余动画帧 --> </animation-list>
注意:如果你的
loading_animation是补间动画(tween animation),不能直接作为drawable放到layer-list中,需要单独绑定到View上设置动画。
自定义启动页Activity场景解决方案
如果你是把这个layer-list作为启动页Activity的window背景/布局背景使用,直接在Activity的onCreate方法中添加动画启动逻辑即可:
// Kotlin 实现 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 若layer-list设置为window背景,用如下方式获取 val layerDrawable = window.decorView.background as LayerListDrawable // 索引从0开始计数,你的加载动画是第三个item,所以取索引2 val loadingAnim = layerDrawable.getDrawable(2) as AnimationDrawable loadingAnim.start() }
// Java 实现 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LayerListDrawable layerDrawable = (LayerListDrawable) getWindow().getDecorView().getBackground(); AnimationDrawable loadingAnim = (AnimationDrawable) layerDrawable.getDrawable(2); loadingAnim.start(); }
Android 12+原生SplashScreen API场景适配
如果你使用的是Android 12及以上系统自带的SplashScreen API,无法直接在layer-list背景中插入动画,需要单独配置图标动画,或者改用自定义启动页布局的方案实现加载动画效果。
内容的提问来源于stack exchange,提问作者Raw Hasan
相关产品推荐
相关产品推荐

