通常给一些view加上阴影效果会使页面效果更好。这里只对21以上的机子经行说明,经市场统一21一下的手机已经不足市场份额的20%
所以,如果你的 App 的 minSdkVersion 就是 21 的话,直接使用这两个属性是最优的解决办法。
elevation 属性
elevation 属性,主要用于给 View 增加一个高度,可以直接被加在 View 控件上,呈现在界面上,就是一个带阴影的效果。
在 layout-xml 布局中,可以通过 android:elevation 属性来设置,而在 Java 代码中,通过 View.setElevation() 方法来使用它。
直接使用 elevation 属性设置即可,它接收一个高度的参数,只需要按我们的需要配置即可。
需要注意的是,View 的阴影一定是需要有背景的 View 在视觉上增高之后,投射出来的。也就是类似于打光的阴影效果。简单来说,就是需要为 View 设置一个 Background,可以使用 android:background 属性或者 View.setBackground() 方法设置,否者 elevation 的属性设置将无效。这里的 Background 只需要设置一个 Drawable 即可,你当然也可以选择一个图片或者一个纯色的 <shape/> 了。
translationZ 属性
translationZ 属性,主要用于给 View 增加一个在 Z 轴上的变换效果。它和 elevation 配合起来,就是一个一加一等于二的效果。也可以用于设置 View 的高度。
在 layout-xml 布局中,可以通过 android:translationZ 属性来设置它,而在 Java 代码中,可以通过 View.setTranslationZ() 方法来使用它。
一般来说,我们可以直接使用 android:translationZ 属性来设置 View,当你配合 android:elevation 属性一起使用的时候,它们对 View 的高度是累加的,当然你也可以只使用其中一个属性。
而看到 translationZ 这样的属性,很轻易就联想到了 translationX 和 translationY 了,它们实际上就是不同维度的设置,思路上很像,但是原理不同。对 X、Y 轴的操作并没有 Api Level 的限制,这一点需要清楚。
和 elevation 属性一样,translationZ 也是需要配合 Background 的设置才会生效的,这个应该不难理解。
如果不在意 Api level 的话,你完全可以使用 android:elevation 和 android:translationZ 两个属性来做的阴影的效果,效果也是非常好的,而且它的阴影实际上是不占用 View 的布局大小的,它会在原本的布局之外,向外扩散,所以也不会影响 View 本身大小的视觉效果。
不过它也有缺陷,你只能通过设定这两个属性来调整阴影的大小,没办法做到精确掌控,并且无法修改阴影的颜色。