首页 > 解决方案 > 如何为形状添加高程?

问题描述

现在我有下一个矩形:

<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>

并有下一个结果:

在此处输入图像描述

问:如何添加阴影/高程而不是描边?

标签: androidxmlshapesandroid-elevation

解决方案


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

为此,您需要使用自定义 XML<layer-list></layer-list>

喜欢

    <?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>

输出


推荐阅读