【Android】Material Design设计中的阴影效果
2020/02/06 来源:乐潮信息
Material Design 的一个很重要的特点就是拟物扁平化。以往的Android View通常具有两个属性,X和Y,而在Android5.X中,Google为其增加了一个新的属性:Z,对应垂直方向上的高度变化。
想象有一束斜光投向屏幕,Z 轴值越大,离光就越近,阴影的范围就越大;Z 轴值越小,离光就越远,阴影的范围就越小。而:
Z=elevation+ translationZ
Elevation是静态的成员,translationZ可以在代码中使用来实现动画效果。
通过在XML布局中使用如下代码来静态设置View的视图高度。
android:elevation="Xdp"
通过下面的代码,演示了不同视图高度所显示效果的不同,XML代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="#ff0000" />
<TextView
android:id="@+id/tv_2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="#ff0000"
android:elevation="2dp" />
<TextView
android:id="@+id/tv_3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="#ff0000"
android:elevation="10dp" />
</LinearLayout>
效果如下图所示:
在程序中,同样可以使用如下代码来改变视图的高度:
view.setTranslationZ(XXX);
通常也会使用属性动画来为视图高度改变的时候增加一个动画效果,代码如下:
if (flag1) {
tv1.animate().translationZ(100);
} else {
tv1.animate().translationZ(0);
}
flag1 = !flag1;
在引入了elevation这个属性之后,主要影响有两个:
1、影响View的阴影
Z值会对View的阴影外观造成影响,但是不是对View大小造成影响。
2、影响View相互阻挡顺序
拥有更大Z值的View会挡住Z值比较小的View——即更大Z值的View会在最上层。
注意:
1. 控件必须设置背景色,且不能为透明。
2. 阴影是绘制于父控件上的,所以控件与父控件的边界之间需有足够空间绘制出阴影才行。
3. 图片尽量使用.png, 防止图片过大导致oom或者elevation失效
4.background是图片时、background直接设置具体颜色值时容易无效如:#ffaacc,background是shape时效果最好
5.设置elevation的View最好是ViewGroup子类
乐潮信息www.leco-tec.com