如何为形状添加高程?
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>
输出
现在我有下一个矩形:
<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 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>
输出