在layer-list中使可绘制内容居中裁剪

9

大家好。

我想制作启动画面:

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

drawable/background_splash:

<?xml version="1.0" encoding="utf-8"?>

<item
    android:drawable="@color/main_theme"/>

<item android:bottom="16dp">
    <bitmap
        android:gravity="center|fill_horizontal"
        android:src="@drawable/splash_logo"
        />
</item>

<item android:bottom="16dp">
    <bitmap
        android:gravity="bottom"
        android:src="@drawable/logo"/>
</item>

但是我没有能力使android:src="@drawable/splash_logo"的位图在ImageView中以centerCrop比例缩放并居中(我需要我的位图填充整个宽度)。现在它的大小与资源中的像素大小相同。如果我将其放大,它将超出屏幕。我尝试过缩放可绘制对象,但没有意义。

您有任何建议吗?


你有得到这个问题的答案吗? - Phong Nguyen
不,对于那些问题是不可能的。也许自那时以来有些变化。你所能做的就是将一些可绘制的东西设为100dp。 - Yurii Kot
好的,我明白了,谢谢您的回复。 - Phong Nguyen
2个回答

1

我能够实现填充屏幕,但请注意,在18:9的屏幕上会有一些拉伸。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/splash_2_x2"
        android:top="0dp"
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"/>
</layer-list>

要填充屏幕,您只需要使用重力属性,例如 android:gravity="fill",但这不会实现此帖子中提出的 centerCrop。 - luis

0

将此行更改为

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>

 <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:background">@drawable/background_splash</item>
</style>

因为android:windowsBackground属性无法在全屏显示启动画面。使用android:background作为启动画面的好方法。然后,如果您想要,在Splash Activity中可以调用centercrop。希望这有所帮助!


谢谢,但它有相同的结果。 - Yurii Kot
您的启动图像是否在全屏中显示? - Queendevelopers
不,现在它的宽度是60-70%。我认为在不同的屏幕尺寸下会有不同的结果,介于60-90%之间。 - Yurii Kot
裁剪图像为3个不同大小的ldpi、mdpi和hdpi,并将这些图像放在mipmap中,并从mipmap调用它们,例如@mipmap/logo和@mipmap/splash_logo。这是在所有尺寸的Android手机和平板电脑上适配图像的唯一方法,请参见https://developer.android.com/training/basics/supporting-devices/screens.html。 - Queendevelopers
你可能会发现另一个有用的解决方案是在styles.xml中定义<item name="android:scaleType">centerCrop</item>,试一下,在你的styles.xml中定义它。 - Queendevelopers
3
android:background 是一个视图属性,而不是主题属性。不要在主题中使用它。请注意保持翻译的准确性和原意不变,同时尽可能使翻译更易懂。 - tasomaniac

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