Android shape 阴影

在 Android 开发中,我们经常需要给 View 添加一些阴影效果,以增加视觉层次感和美观性。Android 提供了 android:shadow* 属性来设置文本阴影效果,但如果想要为 View 添加阴影效果,就需要使用其他方式来实现。本文将介绍如何使用 Shape Drawable 来为 View 添加阴影效果。

什么是 Shape Drawable

Shape Drawable 是 Android 中的一种可绘制对象,它可以用来绘制各种形状的背景,如矩形、圆角矩形、椭圆等。Shape Drawable 可以通过 XML 文件定义,在布局文件中直接引用,并且可以设置边框、填充色、渐变色等属性。

添加阴影效果

要为 View 添加阴影效果,可以利用 Shape Drawable 的边框和填充色属性。首先,我们需要创建一个 XML 文件来定义一个矩形的 Shape Drawable,然后设置边框和填充色,并添加一个阴影 Layer。

<shape xmlns:android="
    <solid android:color="#ffffff" />
    <stroke android:color="#000000" android:width="1dp" />
    <corners android:radius="8dp" />
    <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" />
    <size android:width="200dp" android:height="200dp" />
</shape>

上面的 XML 文件定义了一个宽高为 200dp 的矩形 Shape Drawable,填充色为白色,边框颜色为黑色,边框宽度为 1dp,圆角半径为 8dp。同时,我们还设置了 padding 属性,将矩形的内边距设置为 2dp。这样就可以为 View 添加一个简单的矩形背景了。

接下来,我们需要为该 Shape Drawable 添加阴影效果。Android 提供了 layer-list 元素来定义多个 Drawable 的层次关系,我们可以在这个层次关系中添加多个不同的 Drawable,并设置它们的位置和绘制顺序。为了添加阴影效果,我们可以在 Shape Drawable 的基础上添加一个带有阴影的 Shape Drawable。

<layer-list xmlns:android="
    <item>
        <shape>
            <solid android:color="#ffffff" />
            <corners android:radius="8dp" />
            <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" />
            <size android:width="200dp" android:height="200dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="#ffffff" />
            <corners android:radius="8dp" />
            <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" />
            <size android:width="200dp" android:height="200dp" />
        </shape>
    </item>
</layer-list>

上面的 XML 文件定义了一个带有阴影效果的 Shape Drawable。我们在 layer-list 中添加了两个相同的 Shape Drawable,它们的背景色、圆角半径和内边距都相同。这样就形成了一个带有阴影的矩形,其中底部的 Shape Drawable 就是阴影效果。

为了让阴影效果更明显,我们可以为阴影的 Shape Drawable 设置不同的填充色,在代码中使用颜色的 alpha 值来控制透明度,从而实现阴影效果的深浅。

使用带阴影效果的 Shape Drawable

要在布局文件中使用带阴影效果的 Shape Drawable,只需要将其作为 View 的背景即可。例如,我们可以将上面的 Shape Drawable 应用到一个 Button 上:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shadow_shape"
    android:text="Button" />

在上面的代码中,我们将 shadow_shape