从Android 5.0(API级别21)开始,View提供了一个名为“elevation”的属性,用于设置阴影的大小。这个属性可以通过XML或代码来设置。注意,阴影的大小与View的Z值(elevation)和translationZ属性有关。Z值由elevation和translationZ共同决定,通常elevation用于静态阴影,而translationZ用于动画。
xml设置:
代码设置:
在Material Design 设计规范中,存在两个光源,一个是点光源, 一个是环境光,两种光源共同作用,形成View的阴影效果。默认情况下,阴影是黑色的,然而很多时候我们想让阴影颜色与 View 本身的颜色一致,达到更好地视觉效果。Android贴心地考虑到这一点,为我们提供了API:setOutlineAmbientShadowColor和setOutlineSpotShadowColor。开发者可以通过 xml 或 代码改变阴影的颜色。
「setOutlineAmbientShadowColor」
- 当view 的Z 值或者 elevation 值为正数时,设置环境阴影颜色
- 默认阴影是黑色、不透明的,因此阴影的强度在不同颜色的不同视图之间是一致的
- 最终环境阴影的不透明度是(阴影投射器高度、outlineAmbientShadowColor的alpha通道(通常为不透明)和R.attr.ambientShadowAlpha 主题属性)的函数
xml设置:
代码设置:
「setOutlineSpotShadowColor」
- 当view 的Z 值或者 elevation 值为正数时,设置点阴影颜色
- 默认阴影是黑色、不透明的,因此阴影的强度在不同颜色的不同视图之间是一致的
- 最终点阴影的不透明度是(阴影投射器高度、outlineAmbientShadowColor的alpha通道(通常为不透明)和R.attr.ambientShadowAlpha 主题属性)的函数
xml设置:
代码设置:
设置阴影的其他方案:
- 使用自定义视图和draw方法:如果你想创建更复杂的阴影效果,可以通过扩展View类并重写onDraw方法来实现。在这个方法中,你可以使用Canvas的drawRect、drawPath等方法来绘制阴影。
- 使用第三方库:有些第三方库可以帮助你更容易地给View添加阴影效果,例如CardView和Material Design库。这些库通常提供了更丰富的阴影选项,如颜色、大小和模糊半径等。
- 使用9-PatchDrawable:创建一个包含阴影的9-PatchDrawable资源,并将其作为View的背景。这种方法适用于固定大小的阴影,例如在按钮或卡片上添加阴影。