安卓形状:带十字架(加号)的圆形

12

我想要一个带有十字架(加号)的圆形,就像下面这样:

enter image description here

我读过的大部分教程都没有帮助我理解layer-lists。以下是我到目前为止的代码:

<item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
    <shape android:shape="line">
        <stroke android:width="10dp" />
        <solid android:color="@color/bus_red" />
    </shape>
</item>

<item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="90" >
            <shape android:shape="line">
                <stroke android:width="10dp" />
                <solid android:color="@color/bus_red" />
            </shape>
    </rotate>
</item>

<item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="20dp"
        android:thickness="5dp"
        android:useLevel="false">

        <solid android:color="@color/bus_red" />
    </shape>
</item>

您可以看到我有一个环形和两个线形,其中一个我正在尝试旋转。环形没有问题,但我无法让中间的两条线显示出来。


为什么不使用没有旋转的矩形? - jyoonPro
@jyoon 那是我的第一种尝试,但我也没能让它起作用 :/ 我不知道如何将这些行居中。 - basickarl
android:gravity="center" 或类似的东西就可以解决问题了。 - jyoonPro
3个回答

21

我使用以下的可绘制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="@color/accent"/>
        </shape>
    </item>
    <item>
        <shape android:shape="line">
            <stroke android:width="5dp" android:color="@android:color/white" />
         </shape>
    </item>
    <item>
        <rotate
            android:fromDegrees="90"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="-90">
            <shape android:shape="line">
                <stroke android:width="5dp" android:color="@android:color/white" />
            </shape>
        </rotate>
    </item>
</layer-list>

1
在RelativeLayout中:
<View
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:background="@drawable/circle_add"/>

circle_add:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval" >
            <solid
                android:color="@color/bus_green" />
            <size
                android:width="30dp"
                android:height="30dp" />
        </shape>
    </item>

    <item android:top="10dp" android:left="17dp" android:bottom="10dp" android:right="17dp">
        <shape>
            <stroke android:width="0dp" android:color="#ff207d94" />
            <padding android:left="0dp"
                android:top="0dp"
                android:right="0dp"
                android:bottom="0dp" />
            <corners android:radius="0dp" />
            <solid android:color="#ffffffff" />
        </shape>
    </item>

    <item android:top="17dp" android:left="10dp" android:bottom="17dp" android:right="10dp">
        <shape>
            <stroke android:width="0dp" android:color="#ff207d94" />
            <padding android:left="0dp"
                android:top="0dp"
                android:right="0dp"
                android:bottom="0dp" />
            <corners android:radius="0dp" />
            <solid android:color="#ffffffff" />
        </shape>
    </item>
</layer-list>

1
我认为这种方法仍然有效,因为它仍然在XML中使用drawable
您可以在Android Studio中创建名为add circle outline的新矢量资源。
这是它生成的代码:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
</vector>

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