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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:03