如何在图层列表 android 内缩放和居中可绘制对象?

How to scale and centre a drawable inside layer-list android?

我正在尝试将可绘制图像居中,两边都有一些填充以用作初始屏幕徽标。问题是如果我使用 gravity.

,它要么在整个屏幕上伸展,要么忽略任何填充
<?xml version="1.0" encoding="utf-8"?>

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

<item android:gravity="top|center_horizontal|center_vertical" android:drawable="@drawable/zc_logo_r"
      android:top="100dp"
      android:left="200dp"
      android:right="200dp"
      android:layout_margin="100dp"
    >
</item>

我试过使用位图,android:gravity="fill_horizontal" 和其他各种关于 SO 的建议,结果相同。

如何在我的 xml 中缩放和居中图像?

将可绘制图像变成九个补丁可能是最简单的方法。

您 运行 遇到的问题是层列表没有关于其大小的内在概念。当它被放置在容器内时,边界被设置。 xml 属性是在编译时设置的,因此很难在 xml 可绘制对象中获取动态值。

如果您可以使用 ImageView,那么您可以在 src 属性中设置您的 drawable,并使用 padding、margins 和 scaleType 来控制 drawable 的位置和缩放比例。

作为参考,如果您遇到同样的问题,我用可绘制文件夹(即 hdpi、mdpi、xhpi、xxhpi 和 xxxhdpi)中的方形图像解决了这个问题,而不是调整太大的矩形图像尺寸和变形。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/grey_3"/>
    <item android:gravity="center">
          <bitmap android:src="@drawable/splash_logo"/>
    </item>
</layer-list>