安卓:绘制自定义形状

18

我想画一个像这样的自定义形状-

一种选择是在Photoshop中单独制作每个形状,然后在编码中使用它,但我想知道是否可能使用xml绘制它?

我应该如何绘制这样的形状?不要期望完整的代码,只需给我想法或指引我正确的方向。

1个回答

48

尝试以下形状可绘制 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:width="100dp"
            android:height="40dp" />
        <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>

这是在白色背景上的效果:

enter image description here

关于形状绘制,这里有更多信息.

编辑:

以下是一个小的说明。

  1. 我们放置一个大小为100 x 40dp的黄色矩形。从现在开始,该矩形可以被视为其余形状的容器。容器的边框被认为是我们将要放置在容器内的形状边框的原点。即,设置形状标签的size属性的top, bottom, right和left属性表示形状边框到容器(黄色矩形)的top, bottom, right和left边缘的距离。

例如,如果我们想在黄色矩形内部放置一个具有10dp间隔的较小矩形,则为新的(内部)矩形设置top, bottom, right和left属性等于10dp

  1. 为了实现黄色矩形右侧的箭头形状,我们使用两个白色矩形适当地向右移动和旋转。请注意,size标记属性的值可能为负数,这意味着相应形状的边缘出现在容器外。在前面的例子中,如果将left属性设置为100dp或更高,则内部矩形不会显示,因为它将位于黄色矩形的右侧边界之后。

关于旋转,它顺时针旋转正值,逆时针旋转负值。

  1. 对于左侧的形状,只需使用一个向左移动的矩形(部分移出容器)并以45度旋转即可。

希望这没有使您感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接