了解Android的<layer-list>

我不明白图层列表是如何工作的。 我用一些例子阅读了官方文档,但是对于我来说并不像预期的那样。 我想要四个正方形应填充1dp,但没有像预期的那样。 这是一个由500%缩放的屏幕截图:

我的suares
(错误的颜色并不重要)
正如你所看到的大小是完全错误的,填充缺失。 我试图设置像宽度/高度和右/左/顶/ buttom真正的值,以确保android得到我想要的点。

这是我的xml:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp"> <shape android:shape="rectangle"> <size android:width="9dp" android:height="9dp"/> <solid android:color="#f000"/> </shape> </item> <item android:top="1dp" android:left="1dp" android:bottom="5dp" android:right="5dp"> <shape android:shape="rectangle"> <size android:width="3dp" android:height="3dp"/> <solid android:color="#f00"/> </shape> </item> <item android:top="1dp" android:left="5dp" android:bottom="5dp" android:right="1dp"> <shape android:shape="rectangle"> <size android:width="3dp" android:height="3dp"/> <solid android:color="#0f0"/> </shape> </item> <item android:top="5dp" android:left="1dp" android:bottom="1dp" android:right="5dp"> <shape android:shape="rectangle"> <size android:width="3dp" android:height="3dp"/> <solid android:color="#0f0"/> </shape> </item> <item android:top="5dp" android:left="5dp" android:bottom="1dp" android:right="1dp"> <shape android:shape="rectangle"> <size android:width="3dp" android:height="3dp"/> <solid android:color="#f00"/> </shape> </item> </layer-list> 

左边,上边,右边和底边的值从它们各自的边缘测量。

所以left = 0dp,top = 0dp,bottom = 0dp&right = 50dp会给你一个矩形,它是(match_parent – 50dp)宽而不是50dp宽。 因此,较大的“右”值实际上会给你一个更小的矩形。

同样的情况也适用于其他价值,但在大多数情况下,这些行为会像预期的那样行事,而这恰恰可能会造成混淆。

您可以使用px代替dp也可以将所有维数乘以10

我很惭愧地承认,我并不完全知道为什么会发生这种情况,但我的猜测是,这与密度有关,其中1dp是一个浮动的px值,而ImageView是按比例放大的。

专家的回答是欢迎:)