如何在图层列表 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>
我正在尝试将可绘制图像居中,两边都有一些填充以用作初始屏幕徽标。问题是如果我使用 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>