使用Android中的ShapeDrawable在xml中绘制多个形状

65

我目前正在使用自定义视图中的代码在画布上绘制多个圆。这些圆是静态的,不会改变。我希望使用xml中的ShapeDrawable来绘制它们,以帮助整理我的代码。用户可以选择多种不同的可绘制对象,因此我不想在代码中实现。使用3到4个xml drawables似乎更整洁。

我已经使用ShapeDrawable在xml中创建了一个圆形,但无法添加多个形状到xml中。

如何使用ShapeDrawable在xml文档中添加多个形状。

3个回答

103

这是我用一个像素的黑色边框和白色数字72中间填充红色圆圈的方法:

在res\drawable文件夹下创建一个名为red_circle_black_border.xml的XML文件,并适当命名。

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="@android:color/black" />
        </shape>
    </item>
    <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp">
        <shape android:shape="oval">
            <solid android:color="@android:color/red" />
        </shape>
    </item>
</layer-list>

然后,在您的布局中使用它,将其声明如下:

<TextView
    android:text="72"
    android:textSize="14dp"
    android:textStyle="bold"
    android:background="@drawable/red_circle_black_border" 
    android:layout_width="22dp"
    android:layout_height="22dp"
    android:gravity="center_vertical|center_horizontal"
    android:textColor="@android:color/white" />

显然需要根据需求更改textSize和layout_width/height :-)


如果没有文本要显示,我假设您可以使用ImageView? - skyfoot
2
当然。它现在实际上只是一个可绘制对象,所以可以像图片一样使用它。 - Kenton Price
请注意,您可以通过使用形状的描边(也称为边框)元素来实现相同的效果: <shape android:shape="oval" > <solid android:color="@android:color/red" /> <stroke android:width="5dp" android:color="@color/black" /> </shape> - user608578

57

我认为我已经找到了一个解决方案,使用 Layer-list 可以向我的 XML 文件添加多个形状。虽然我还没有尝试过,但这似乎正是我想要的,因为这些形状将按其数组索引的顺序绘制。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item>
      <shape>
         <solid android:color="#FFF8F8F8" />
      </shape>
   </item>
   <item android:top="23px">
      <shape>
         <solid android:color="#FFE7E7E8" />
      </shape>
   </item>
</layer-list>

博客文章

Android文档


0

我有一个带有两个外部口的示例勾选标志图标,可能对你有所帮助。将其放在drawable文件夹中。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:width="48dp"
        android:height="48dp">
        <shape android:shape="oval">
            <solid android:color="#5265FF" />
        </shape>
    </item>
    <item
        android:width="38dp"
        android:height="38dp"
        android:left="5dp"
        android:top="5dp">
        <shape android:shape="oval">
            <solid android:color="#636DFF" />
        </shape>
    </item>
    <item
        android:width="28dp"
        android:height="28dp"
        android:left="10dp"
        android:top="10dp">
        <vector
            android:width="27dp"
            android:height="27dp"
            android:tint="#F3F1FE"
            android:viewportWidth="24"
            android:viewportHeight="24">
            <path
                android:fillColor="@android:color/white"
                android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
        </vector>
    </item>
</layer-list>

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