如何为形状添加高程?

How to add elevation for shape?

现在我有下一个矩形:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="28dp" />

    <gradient
        android:endColor="#FFFFFF"
        android:gradientRadius="20dp"
        android:startColor="#FFFFFF"
        android:type="linear" />

    <size
        android:width="106dp"
        android:height="106dp" />

    <stroke
        android:width="1dp"
        android:color="#0189ff" />
</shape>

并得到下一个结果:

问:如何添加 shadow/elevation 而不是笔划?

不能直接用阴影代替描边。

为此,您需要使用 <layer-list></layer-list>

自定义 XML

喜欢

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Drop Shadow Stack -->
    <item>
        <shape>

            <padding
                android:bottom="@dimen/_3sdp"
                android:left="@dimen/_1sdp"
                android:right="@dimen/_3sdp"
                android:top="@dimen/_1sdp" />
            <solid android:color="#00dff2e4" />

            <corners android:radius="@dimen/_5sdp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding
                android:bottom="@dimen/_3sdp"
                android:left="@dimen/_1sdp"
                android:right="@dimen/_3sdp"
                android:top="@dimen/_1sdp" />

            <solid android:color="#10dff2e4" />

            <corners android:radius="@dimen/_50sdp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding
                android:bottom="@dimen/_3sdp"
                android:left="@dimen/_1sdp"
                android:right="@dimen/_3sdp"
                android:top="@dimen/_1sdp" />

            <solid android:color="#20dff2e4" />

            <corners android:radius="@dimen/_50sdp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding
                android:bottom="@dimen/_3sdp"
                android:left="@dimen/_1sdp"
                android:right="@dimen/_3sdp"
                android:top="@dimen/_1sdp" />

            <solid android:color="#30dff2e4" />

            <corners android:radius="@dimen/_50sdp" />
        </shape>
    </item>
    <item>
        <shape>
            <padding
                android:bottom="@dimen/_3sdp"
                android:left="@dimen/_1sdp"
                android:right="@dimen/_3sdp"
                android:top="@dimen/_1sdp" />

            <solid android:color="#50dff2e4" />

            <corners android:radius="@dimen/_50sdp" />
        </shape>
    </item>

    <!-- Background -->
    <item>
        <shape>
            <solid android:color="@android:color/white" />

            <corners android:radius="@dimen/_50sdp" />
        </shape>
    </item>

</layer-list>

输出