Android | JAVA |如何给矢量图添加阴影?

Android | JAVA | How to add a shadow to vector?

我有一个 svg 矢量文件。我怎样才能给它添加 colored shadow。我对 google 和 Whosebug 进行了研究,但看起来它在我的情况下不起作用。

SVG XML

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="50dp"
    android:height="50dp"
    android:viewportWidth="35"
    android:viewportHeight="35">
  <path
      android:pathData="M18.5,18.5m-12.5,0a12.5,12.5 0,1 1,25 0a12.5,12.5 0,1 1,-25 0"
      android:fillColor="@color/green"/>
</vector>

里面的代码 activity_main.xml

<ImageView
        android:id="@+id/green"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/ic_green_light" />

我找不到给它添加阴影的简单甚至可行的方法。

我想添加这样的阴影..

注意:ImageView 上的高度不起作用。

我不确定阴影是否适用于矢量。计算所有投射的阴影可能很复杂。相反,您应该创建一个阴影形状的背景:

drawable/background.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/green" />
        </shape>
    </item>
</layer-list>

1) 海拔

使用高程时,Android 会自动渲染阴影。 android:elevation="16dp 在你的 ImageView 上应该可以解决问题。

<ImageView
    android:id="@+id/green"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:elevation="16dp"
    android:background="@drawable/background"
    android:src="@drawable/ic_green_light" />

注意:

海拔越高,阴影越大越模糊。

使用较低的高度,会产生更小但更倾斜的阴影。

为了控制颜色,你可以在 API28+ 上使用这些:

android:outlineAmbientShadowColor="#ff0000" // api 28+ only
android:outlineSpotShadowColor="#ff0000" // api 28+ only

2) 阴影

另一种选择是使用:

android:shadowColor="@color/almost_black"
android:shadowDx="1.5f"
android:shadowDy="1.5f"
android:shadowRadius="12f"

更多控制。但这可能需要一个 TextView。

3) 改变向量

如果这一切都失败了,您应该考虑自己创建阴影作为 Vector 的一部分