Android开发 View的阴影详解

前言

  Android的阴影概念是跟随Material Design设计风格出现的,因为Material Design的设计有Z轴概念,就是每个View都有自己的深度层级。Z轴的概念有了之后必然有表现这一概念的阴影效果的实现。所以google在Android5.0版本添加这阴影效果的支持。此篇博客不啰嗦Material Design的部分,我们只聊聊阴影的实现。

实现阴影功能的Api组件有那些?

  这里,先给出彻底了解阴影效果实现能涉及到的属性或者Api表。这样有一个笼统的概念,后面会一一讲解,就会了解这些组件各种涉及的功能范围。

1.设置View的Z轴高度  android:elevation="10dp"   对应代码  setElevation(); 

2.设置View的Z轴高度  android:translationZ="10dp" 对应代码 setTranslationZ()

3.设置View阴影轮廓范围的模式  android:outlineProvider="" 对应代码  setOutlineProvider();

4.设置View的阴影颜色 android:outlineSpotShadowColor="#03A9F4" 对应代码 setOutlineSpotShadowColor()(请注意!此条属性必需在高于Android10版本包含10的版本才有效果)

5.设置View的阴影光环颜色,但是基本看不到,非常迷惑的属性。 android:outlineAmbientShadowColor="#03A9F4" 对应代码 setOutlineAmbientShadowColor(请注意!此条属性必需在高于Android10版本包含10的版本才有效果)

6.设置View自定义形状的阴影 setOutlineProvider(new ViewOutlineProvider(){ //略..});

特别需要注意的地方

  在开始之前,还是说一下要避坑的地方。

  1. 请开启硬件加速功能 android:hardwareAccelerated="true" ,现在的设备一般是默认开启硬件加速的。但是如果你主动设置关闭会出现没有阴影效果的问题。
  2. 请检查好自己的Android版本,必需在5.0以上。设置阴影颜色效果必需需要在10.0以上。
  3. 阴影是绘制于父控件上的,所以控件与父控件的边界之间需有足够空间绘制出阴影才行。
  4. 如果未设置 android:outlineProvider="bounds" ,那么控件这个属性会默认为android:outlineProvider="background", 这个时候View必须设置背景色,且不能为透明,否则会没有阴影。
  5. 不能将elevation 或者 translationZ 的值设置的比整个View还大,这样会有阴影效果。但是阴影的渐进效果会被拉的很长很长,会看不清楚阴影效果,你会错认觉得没有阴影效果。

android:elevation与android:translationZ

这两个属性都是设置View的Z轴高度,他们的关系是: 实际ViewZ轴高度 = elevation + translationZ

google为什么要这么别扭的弄出2个一样功能的实现来配置Z轴高度呢?这就是涉及到他们2个的区别:

  • elevation 是View的默认值Z轴高度
  • translationZ 是View的动态Z轴高度,什么是动态高度? 就是假设你需要实现阴影动画,改变Z轴高度,你就应该使用此条属性。

实现阴影动画例子

xml:

    <TextView
        android:id="@+id/view_1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="内容1"
        android:elevation="10dp"
        android:gravity="center"
        android:layout_marginTop="30dp"
        android:outlineProvider="bounds"
        android:outlineSpotShadowColor="#FF1100"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">
    </TextView>

注意,因为下面的效果图是git,但是git图压缩的很厉害,为了阴影效果看的更清楚,所以我这里设置了 android:outlineProvider="bounds" 属性 与 改变了阴影颜色 android:outlineSpotShadowColor="#FF11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值