android阴影效果的官方文档,Android Material Design 阴影实现

让 View 产生阴影有以下 4 种方式:

控制 elevation

使用 OutlineProvider

使用 9 图

使用 MD 风格的控件,如 CardView,FloatingActionButton

0.Z轴的概念

Android 在 5.0 及以后采用了 Material Design 设计语言,引入了 Z 轴的概念,也就是垂直于屏幕的轴,Z 轴会让 View 产生阴影的效果:

bcbd0769e7ac

shadows-depth.png

想象有一束斜光投向屏幕,Z 轴值越大,离光就越近,阴影的范围就越大;Z 轴值越小,离光就越远,阴影的范围就越小。而:

Z=elevation+ translationZ

elevation 一般是写在 xml 文件中做静态配置,translateZ 是用来控制动画效果。

是 Z 轴让 View 产生了阴影,我们要控制阴影就是控制 Z 轴啦:

1.控制 elevation

控制 elevation,需要先设置 View 的 BackGround,再设置 elevation。

首先配置一个 drawable:

android:shape="rectangle">

再设置 background 和 elevation:

android:id="@+id/myview"

android:layout_width="100dp"

android:layout_height="100dp"

android:elevation="2dp"

android:background="@drawable/myrect" />

bcbd0769e7ac

效果图

2.使用 OutlineProvider

第 1 种方式可以满足大多数情况,但如果 View 的 background 是 color、图片,甚至是自定义 View 时就无法产生阴影效果了,这是我们需要通过代码设置阴影。官方称之为 outline。

view.setOutlineProvider(new ViewOutlineProvider() {

@Override

public void getOutline(View view, Outline outline) {

outline.setRect(0,0,view.getWidth(),view.getHeight());

}

});

outline 就是绘制的外部阴影样式,样式可以是任意的:矩形、园、圆角矩形、甚至是路径:

bcbd0769e7ac

outline的方法

3.使用 9 图

前面两种方法涵盖了大多数情况,实在还有意外:比如兼容 5.0 之前的 UI 样式、UI设计的阴影居然是彩色的!那就使用最后的绝招了: 9 图。不过使用 9 图的灵活性实在是差,高度不同就要不同的切图,这里有一个网站可以自己随意切阴影图:http://inloop.github.io/shadow4android/

4.使用官方 MD 组件

其实官方组件的 ActionBar、CardView,FloatingActionButton就自带阴影,应尽量使用他们,这里就不展开讲了。

5.translateZ 动画

介绍 Z 轴时,说过 Z=elevation+ translationZ。elevation 是静态的,而 translateZ 是动态的。如我们点击按钮时希望它有一个弹起的效果,像这样:

bcbd0769e7ac

弹起

其实是给 view 配置状态动画控制 translationZ:

android:stateListAnimator="@drawable/selector_elevation"

动画 xml 如下

android:duration="@android:integer/config_shortAnimTime"

android:propertyName="translationZ"

android:valueTo="8dp"

android:valueType="floatType" />

android:duration="@android:integer/config_shortAnimTime"

android:propertyName="translationZ"

android:valueTo="0dp"

android:valueType="floatType" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值