Android:绘制自定义形状
Posted
技术标签:
【中文标题】Android:绘制自定义形状【英文标题】:Android: Drawing custom shapes 【发布时间】:2014-12-06 08:28:31 【问题描述】:我想画一个像这样的自定义形状-。
一种选择是在 Photoshop 中单独制作每个形状,然后在编码中使用它,但我想知道是否可以使用 xml 来绘制它?
我应该如何绘制这样的形状?不要期望完整的代码,只要给我想法或指出正确的方向即可。
【问题讨论】:
【参考方案1】:试试下面的shape drawable xml:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Colored rectangle-->
<item>
<shape android:shape="rectangle">
<size
android:
android: />
<solid android:color="#FAD55C" />
</shape>
</item>
<!-- This rectangle for the left side -->
<!-- Its color should be the same as layout's -->
<item
android:right="90dp"
android:left="-30dp">
<rotate
android:fromDegrees="45">
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</rotate>
</item>
<!-- These rectangles for the right side -->
<!-- Their color should be the same as layout's -->
<item
android:top="-40dp"
android:bottom="63dp"
android:right="-25dp">
<rotate
android:fromDegrees="45">
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</rotate>
</item>
<item
android:top="63dp"
android:bottom="-40dp"
android:right="-25dp">
<rotate
android:fromDegrees="-45">
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</rotate>
</item>
</layer-list>
这就是它在白色背景上的样子:
这里有更多关于Shape Drawables的信息。
编辑:
下面是它是如何完成的一个小解释。
-
我们放置一个 100 x 40 dp 大小的黄色矩形。从现在开始,这个矩形可以被视为其余形状的容器。容器的边界被认为是我们将要放置在容器中的形状边界的起源。即设置 shape 的
size
标签的 top, bottom, right and left
属性表示从 shape 的边界到 top, bottom, right and left
边缘的距离容器(黄色矩形)。
例如,如果我们想在黄色矩形内放置一个较小的矩形,并与每个黄色矩形的边缘有一个10dp
的间隙,我们会将top, bottom, right and left
属性设置为等于10dp
的新(内部)矩形。
-
为了在黄色矩形的右侧实现类似箭头的形状,我们使用了两个适当向右移动并旋转的白色矩形。请注意,
size
标签属性的值可以为负数,这意味着形状的相应边缘出现在容器之外。在前面的示例中,如果您将 left
属性设置为 100 dp 或更高,则内部矩形将不会显示,因为它将位于黄色右边框的后面一个。
关于旋转,正值顺时针旋转,否则逆时针旋转。
-
对于左侧形状,只需将一个矩形移动到左侧(部分在容器之外)并旋转 45 度就足够了。
希望这没有让您感到困惑。
【讨论】:
以上是关于Android:绘制自定义形状的主要内容,如果未能解决你的问题,请参考以下文章