Flutter Android端Lottie动画启动页配置后无显示问题
问题分析
你核心的错误是将包含Android View组件(ConstraintLayout、LottieAnimationView)的布局文件放在了drawable目录下——drawable目录仅用于存放Drawable类型资源(如shape、layer-list、bitmap等),无法解析View组件,系统加载启动主题时无法识别该资源,导致启动背景失效,冷启动时无任何显示,直接等待Flutter初始化完成后进入主页面。
解决方案
1. 添加Lottie依赖
在Android模块的build.gradle(Module级别)中添加Lottie依赖:
dependencies { // 保留原有依赖,新增以下内容 implementation 'com.airbnb.android:lottie:6.4.0' // 使用最新稳定版本 }
2. 创建独立的启动页Activity
新建SplashActivity.kt(或Java版本),用于承载Lottie动画:
class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 隐藏标题栏、设置全屏 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) window.setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ) setContentView(R.layout.activity_splash) // 监听Lottie动画结束,跳转至Flutter主页面 val lottieView = findViewById<LottieAnimationView>(R.id.lottie_splash) lottieView.addAnimatorListener(object : Animator.AnimatorListener { override fun onAnimationStart(animation: Animator?) {} override fun onAnimationEnd(animation: Animator?) { startActivity(Intent(this@SplashActivity, MainActivity::class.java)) finish() } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationRepeat(animation: Animator?) {} }) } }
3. 编写启动页布局文件
在res/layout目录下新建activity_splash.xml:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black"> <com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_splash" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:lottie_autoPlay="true" app:lottie_rawRes="@raw/test_splash" app:lottie_speed="1.0" app:lottie_loop="false"/> <!-- 禁用循环,动画结束后跳转 --> </androidx.constraintlayout.widget.ConstraintLayout>
4. 修改AndroidManifest.xml配置
将SplashActivity设为启动入口,调整MainActivity的配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test"> <application android:label="test" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <!-- 启动页Activity --> <activity android:name=".SplashActivity" android:exported="true" android:theme="@style/LaunchTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Flutter主Activity --> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/NormalTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
5. 清理错误资源
删除drawable、drawable-21目录下的splash_lottie.xml文件。
内容的提问来源于stack exchange,提问作者Wassef Hassine
相关产品推荐
相关产品推荐

