我正在试图弄清楚如何在android xml drawable中创建一个3x3行的小矩形。
这并没有真正让我接近(2个小的,但它们重叠):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="20dp" android:top="20dp" android:right="25dp" android:bottom="25dp" >
<shape android:shape="rectangle">
<stroke android:width="1px" android:color="#fff" />
<solid android:color="#00FF0000" />
<corners android:radius="3dp" />
</shape>
</item>
<item android:left="30dp" android:top="30dp" android:right="35dp" android:bottom="25dp" >
<shape android:shape="rectangle">
<stroke android:width="1px" android:color="#fff" />
<solid android:color="#00FF0000" />
<corners android:radius="3dp" />
<size android:width="10dp"
android:height="10dp"/>
</shape>
</item>
</layer-list>
答案 0 :(得分:7)
部分问题是图层列表中的各个项目会缩放到可绘制的整体大小。如the docs中所述,您可以通过将小方块包裹在bitmap
drawable中来解决此问题。这样的事可能有用。首先,将基本形状定义为单独的drawable:
<强>抽拉/ square.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1px" android:color="#fff" />
<solid android:color="#00FF0000" />
<corners android:radius="3dp" />
<size android:width="10dp" android:height="10dp"/>
</shape>
击> <击> 撞击>
(编辑:如果你能做到这一点会很好,但不幸的是,正如@Someone Somewhere在评论中指出的那样,你不能在<bitmap>
标签内引用形状可绘制的内容。您必须将方块创建为实际的位图图形,以便其余部分工作。)
然后,您可以定义一个不会缩放单个正方形的图层列表:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- first row -->
<item android:left="20dp" android:top="20dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="35dp" android:top="20dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="50dp" android:top="20dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<!-- second row -->
<item android:left="20dp" android:top="35dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="35dp" android:top="35dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="50dp" android:top="35dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<!-- third row -->
<item android:left="20dp" android:top="50dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="35dp" android:top="50dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
<item android:left="50dp" android:top="50dp">
<bitmap android:src="@drawable/square" android:gravity="top|left" />
</item>
</layer-list>
我还没有对此进行过测试,因此可能会有点偏差,但您应该能够调整它以获得您想要的效果。重要的是摆脱缩放。
答案 1 :(得分:1)
请参阅documentation of Layer Lists。
它会清除,top
,left
,bottom
和right
是维度中的属性,用于项目的偏移量:项目本身应该从它的父级边界(图层列表)放置多远。
如果你知道你的图层列表是130 dp宽和130 dp高,并且你想要3x3矩形,那么第一个的偏移应该是
top: 10
left: 10
bottom: 90
right: 90
和下一个(第一行,第二列):
top: 10
left: 50
bottom: 90
right: 50
答案 2 :(得分:0)
正如讨论已经揭示的那样,使用位图仅限于实际位图;其他(XML)drawables不能在这里使用。
ScaleDrawables应该是适合您的解决方案。它们应该提供在结果边界框内调整位置所需的属性。
然而,ScaleDrawables受制于它们用于动画的事实。它们似乎从0级开始,这使得它们看起来很小。此外,似乎无法在XML中设置级别。
如果您可以在代码中设置ScaleDrawables的关卡,请尝试一下。
另请参阅this question。