安卓启动画面:缩放位图

3

我基本上使用以下xml为Android 启动画面: 使用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大于屏幕大小,则会超出屏幕范围。 我看到了三个解决方法,但都有缺点:
  1. <item 中设置 left/right,但这需要 API23+。
  2. xhdpixxhdpi 等不同密度设置不同的 @drawable/logo,但我正在使用Density Split,这将在重用 apk 的其他设备时破坏它(apk 网站,“移动到新设备” - 传输 apk 等应用)。
  3. 使用一个带有 ImageView 的布局,但这会有明显的延迟。
如何正确、无副作用地完成它?

1
这不是一个答案 - 你能否使用矢量图形? - Eugen Martynov
@EugenMartynov 我还没有尝试过,但我想支持API 17+。由于矢量图仅在API 21+上受到本地支持,而API 17-20设备通常速度较慢/旧,因此我认为显示标志会有明显的延迟。 - Tearsdontfalls
1个回答

7

我没有找到好的解决方案,所以我研究了一下Google Drive的启动画面是如何实现的。

基本上他们使用了一个384x384像素的单个文件,并将其放置在目录中,并使用以下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>

这似乎在我测试的所有设备上都表现良好,并解决了我的问题(具体来说是两个问题)。强烈推荐!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接