如何通过 View 设置阴影

移动开发 Android
从Android 5.0(API级别21)开始,View提供了一个名为“elevation”的属性,用于设置阴影的大小。

从Android 5.0(API级别21)开始,View提供了一个名为“elevation”的属性,用于设置阴影的大小。这个属性可以通过XML或代码来设置。注意,阴影的大小与View的Z值(elevation)和translationZ属性有关。Z值由elevation和translationZ共同决定,通常elevation用于静态阴影,而translationZ用于动画。

xml设置:

<View  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:elevation="10dp" />

代码设置:

view.setElevation(20);
//或
view.setTranslationZ(20);

在Material Design 设计规范中,存在两个光源,一个是点光源, 一个是环境光,两种光源共同作用,形成View的阴影效果。默认情况下,阴影是黑色的,然而很多时候我们想让阴影颜色与 View 本身的颜色一致,达到更好地视觉效果。Android贴心地考虑到这一点,为我们提供了API:setOutlineAmbientShadowColor和setOutlineSpotShadowColor。开发者可以通过 xml 或 代码改变阴影的颜色。

「setOutlineAmbientShadowColor」

  • 当view 的Z 值或者 elevation 值为正数时,设置环境阴影颜色
  • 默认阴影是黑色、不透明的,因此阴影的强度在不同颜色的不同视图之间是一致的
  • 最终环境阴影的不透明度是(阴影投射器高度、outlineAmbientShadowColor的alpha通道(通常为不透明)和R.attr.ambientShadowAlpha 主题属性)的函数

xml设置:

android:outlineAmbientShadowColor="#FFAAAA" 

代码设置:

view.setOutlineAmbientShadowColor(mContext.getResources().getColor(R.color.ambient_shadow_color));

「setOutlineSpotShadowColor」

  • 当view 的Z 值或者 elevation 值为正数时,设置点阴影颜色
  • 默认阴影是黑色、不透明的,因此阴影的强度在不同颜色的不同视图之间是一致的
  • 最终点阴影的不透明度是(阴影投射器高度、outlineAmbientShadowColor的alpha通道(通常为不透明)和R.attr.ambientShadowAlpha 主题属性)的函数

xml设置:

android:outlineSpotShadowColor="#BAFDCE" 

代码设置:

view.setOutlineSpotShadowColor(mContext.getResources().getColor(R.color.spot_shadow_color));

设置阴影的其他方案:

  • 使用自定义视图和draw方法:如果你想创建更复杂的阴影效果,可以通过扩展View类并重写onDraw方法来实现。在这个方法中,你可以使用Canvas的drawRect、drawPath等方法来绘制阴影。
public class ShadowView extends View {  
    private Paint paint;  
    private int shadowColor = Color.BLACK;  
    private float shadowRadius = 2f;  
    private float shadowOffset = -1f;  
    private float shadowOpacity = 0.9f;  
  
    public ShadowView(Context context) {  
        super(context);  
        init();  
    }  
  
    private void init() {  
        paint = new Paint();  
        paint.setAntiAlias(true);  
        paint.setStyle(Paint.Style.FILL);  
    }  
  
    @Override  
    protected void onDraw(Canvas canvas) {  
        super.onDraw(canvas);  
        paint.setColor(shadowColor);  
        canvas.drawRect(getPaddingLeft(), getHeight() - shadowOffset, getWidth() - getPaddingRight(), getHeight(), paint);  
    }  
}
  • 使用第三方库:有些第三方库可以帮助你更容易地给View添加阴影效果,例如CardView和Material Design库。这些库通常提供了更丰富的阴影选项,如颜色、大小和模糊半径等。
  • 使用9-PatchDrawable:创建一个包含阴影的9-PatchDrawable资源,并将其作为View的背景。这种方法适用于固定大小的阴影,例如在按钮或卡片上添加阴影。
责任编辑:赵宁宁 来源: 沐雨花飞蝶
相关推荐

2011-08-22 13:52:20

iPhone开发View

2022-03-11 07:22:20

CSS阴影基础前端

2011-03-14 14:19:52

VMware ViewiPadApp Store

2011-08-02 15:07:43

组策略群集用户账户

2010-05-24 12:23:35

2013-05-14 09:41:14

虚拟化桌面虚拟化

2019-02-20 09:50:48

互联网裁员职场

2010-09-29 15:28:44

DHCP端口

2010-09-25 16:17:42

2010-07-21 09:33:09

VMware View

2009-05-14 09:19:50

微软Windows 7操作系统

2022-06-23 06:42:06

CSSJS 监听

2010-03-05 13:40:29

Android Vie

2011-08-02 18:25:04

Web远程管理服务器

2022-05-17 08:53:26

TPS性能测试

2019-02-25 20:00:09

私有云公共云云平台

2011-04-26 09:54:04

激光笔投影仪

2009-09-17 09:22:23

CCNA考试CCNA

2019-02-12 09:00:00

DockerSourcegraph

2011-09-06 09:06:24

VMware View小型企业
点赞
收藏

51CTO技术栈公众号