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:绘制自定义形状的主要内容,如果未能解决你的问题,请参考以下文章

在自定义视图中绘制描边形状

如何在颤动中绘制自定义动态高度曲线形状?

自定义形状记录在绘制路径之外的点击

SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?

如何在 UIScrollView 中绘制自定义形状

如何使用 WPF 中的 TextShape 类绘制自定义形状?