Android 启动画面:缩放位图
Android Splash Screen: Scale Bitmap
我基本上使用以下 xml 作为 Android 启动画面:清空 activity 和 windowBackground
:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
background_splash.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/defaultBackground" />
</item>
<item>
<bitmap
android:src="@drawable/logo"
android:tileMode="disabled"
android:gravity="center"/>
</item>
</layer-list>
只要 logo.png
小于屏幕尺寸,它就可以正常工作。 如果 logo.png
比屏幕大,它会超出屏幕。
我看到了 3 种解决方法,但都有缺点:
- Setting
left
/right
in <item
, but this requires API 23+
- 为
xhdpi
、xxhdpi
等改变 @drawable/logo
,但我使用的是 Density Split,这会在为其他设备(apk 站点,"Move to new device"-传输apks等的应用)
- 使用带有
ImageView
的布局,但这有明显的延迟
如何正确/没有缺点?
我没有找到好的解决方案,所以我查看了 Google Drive 的闪屏是如何实现的。
基本上他们使用单个 splash.png
和 384x384px 并将其放入 drawable-xhdpi
并使用以下 xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list android:opacity="opaque"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/defaultBackground" />
<item>
<bitmap android:gravity="center" android:src="@drawable/splash" />
</item>
</layer-list>
这似乎在所有设备(我测试过)上看起来都不错并且解决了我的问题(特别是 2)。强烈推荐!
我基本上使用以下 xml 作为 Android 启动画面:清空 activity 和 windowBackground
:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
background_splash.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/defaultBackground" />
</item>
<item>
<bitmap
android:src="@drawable/logo"
android:tileMode="disabled"
android:gravity="center"/>
</item>
</layer-list>
只要 logo.png
小于屏幕尺寸,它就可以正常工作。 如果 logo.png
比屏幕大,它会超出屏幕。
我看到了 3 种解决方法,但都有缺点:
- Setting
left
/right
in<item
, but this requires API 23+ - 为
xhdpi
、xxhdpi
等改变@drawable/logo
,但我使用的是 Density Split,这会在为其他设备(apk 站点,"Move to new device"-传输apks等的应用) - 使用带有
ImageView
的布局,但这有明显的延迟
如何正确/没有缺点?
我没有找到好的解决方案,所以我查看了 Google Drive 的闪屏是如何实现的。
基本上他们使用单个 splash.png
和 384x384px 并将其放入 drawable-xhdpi
并使用以下 xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list android:opacity="opaque"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/defaultBackground" />
<item>
<bitmap android:gravity="center" android:src="@drawable/splash" />
</item>
</layer-list>
这似乎在所有设备(我测试过)上看起来都不错并且解决了我的问题(特别是 2)。强烈推荐!