参考:

https://developer.android.com/training/material/shadows-clipping.html#Shadows

https://material.google.com/material-design/elevation-shadows.html#

1、简介

在Material Design主题当中给UI元素引入了高度的概念,呈现出了立体的效果,如下所示:

视图的高度由属性Z来表示,决定了阴影的视觉效果,Z越大,阴影就越大且越柔和。但是Z值并不会影响视图的大小。

我们还可以使用高度来创建动画,比如当点击按钮的时候让其高度增加,达到交互的效果。

2、给视图设置高度

视图的Z值由两个分量表示:

1、Elevation:静态的分量

2、Translation:用于动画的动态的分量

Z值的计算公式为:

Z=elevation+translationZ

1、通过在xml布局文件当中给一个视图设置android:elevation属性,来设置视图的高度。当然我们也可以在代码当中使用

View.setElevation()来给视图设置高度。

2、还可以在代码当中设置视图的translationZ分量:View.setTranslationZ()。

3、新的ViewPropertyAnimator.z()以及ViewPropertyAnimator.translationZ()方法能够很容易的改变视图的高度。关于这个动画的更多信息,参考ViewPropertyAnimator以及PropertyAnimation相关的API。

4、还可以给视图设置Android:StateListAnimator属性来设置视图的状态改变动画,比如当点击按钮的时候改变其translationZ分量的值。

关于Material design中的动画,由于比较复杂,之后的博客再讲。

对了,Z值的单位是dp。

3、自定义视图的阴影和轮廓

视图背景的边界决定了阴影的阴影的默认形状。轮廓则代表一个图形对象的外围边界以及触摸反馈的水波纹扩散的区域。

我们可以定义一个背景drawable,把背景设置为一个圆角矩形,填充颜色:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="#42000000" /><corners android:radius="20dp" />
</shape>

然后在布局文件当中引用:

<TextViewandroid:id="@+id/tv_demo4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_demo3"android:layout_marginTop="20dp"android:elevation="10dp"android:background="@drawable/myrect"android:text="Elevation 10dp Customize View Shadows"android:textSize="30sp" />

这样我们就可以通过自定义的轮廓来产生不同的阴影效果。

4、效果

首先是布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.easyliu.elevationandshadows.MainActivity"><TextViewandroid:id="@+id/tv_demo1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:elevation="20dp"android:text="Elevation 20dp"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_demo2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_demo1"android:layout_marginTop="20dp"android:elevation="10dp"android:text="Elevation 10dp"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_demo3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_demo2"android:layout_marginTop="20dp"android:elevation="2dp"android:text="Elevation 2dp"android:textSize="30sp" /><TextViewandroid:id="@+id/tv_demo4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_demo3"android:layout_marginTop="20dp"android:elevation="10dp"android:background="@drawable/myrect"android:text="Elevation 10dp Customize View Shadows"android:textSize="30sp" /></RelativeLayout>

效果如下所示:

5、Material design当中Elevation和Shadows规范

在material design设计规范当中,给一些常用的控件都提供了Elevation设计规范,如下所示,基本上我们按照这个规范来,就能得到比较好的视觉效果。

Material Design中的Elevation和shadows相关推荐

  1. android+水滴粘性动画,纯css实现Material Design中的水滴动画按钮

    前言 大家平时应该经常见到这种特效,很炫酷不是吗 这是谷歌Material Design中最常见的特效了,市面上也有很多现成的js库,用来模拟这一特效.但是往往要引入一大堆js和css,其实在已有的项 ...

  2. android java 给控件设置style,在Android Lollipop for Material Design中为SwitchCompat按钮设置样式/着色...

    我一直在尝试查找资源,解释如何在Material Design主题中设置切换按钮的样式 . 现在使用新的appcompat-v7:21,着色小部件非常简单 . 只要您使用appcompat-v7:21 ...

  3. 怎么用java做水滴动画_‘纯css实现Material Design中的水滴动画按钮’的js体验优化...

    前言 在上一篇,我们已经实现了用纯css实现水滴扩散动画,但是有一些瑕疵,文章结尾处也提到过,一是页面加载进来就会看到按钮上的水滴动画运动一次,二是点击的时候不能根据鼠标的位置来扩散,今天我们来解决这 ...

  4. android6.0进入Material Design时代

    Material Design 官方Material Design详细介绍文档:http://www.google.com/design/spec/material-design/introducti ...

  5. 【Android】进入Material Design时代

    由于本文引用了大量官方文档.图片资源,以及开源社区的Lib和相关图片资源,因此在转载的时候,务必注明来源,如果使用资源请注明资源的出处,尊重版权,尊重别人的劳动成果,谢谢! Material Desi ...

  6. Android material design

    关于Material Design的开源库,本人已经在GitHub上创建了一个项目MaterialDesignCenter,用于收集Material Design的相关资源,会不定时更新,大家可以st ...

  7. Material Design(Android6.0)

    转:http://blog.csdn.net/xushuaic/article/details/40627389 由于本文引用了大量官方文档.图片资源,以及开源社区的Lib和相关图片资源,因此在转载的 ...

  8. Create Apps with Material Design

    设计原则 实体感隐喻 通过构建系统化的动效和空间合理化利用,并将两个理念合二为一,构成了实体隐喻.与众不同的触感是实体的基础,这一灵感来自我们对纸墨的研究,但是我们相信,随着科技的进步,应用前景将不可 ...

  9. 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习

    Future再论: 这里在继续往下学习之前,先来看一下Dart语言关于Event-Queue和Microtask Queue需要注意的一个小点,这个在之前https://www.cnblogs.com ...

最新文章

  1. python怎么知道用哪个库使用-Python链接数据库,使用哪个库,怎么操作?
  2. 原 Ubuntu使用VNC运行基于Docker的桌面系统
  3. boost::hana::detail模块实现相关算法的测试程序
  4. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
  5. MySQL必知必会(使用子查询)
  6. Thinkphp带表情的评论回复实例
  7. 数据绑定和第一个AngularJS 应用
  8. linux设备驱动模型及其他,Linux设备驱动模型
  9. 你会为了好工作和优质配偶整容吗?
  10. Linux内核生成版本号的一些研究
  11. 神经网络与深度学习第1章:绪论 阅读提问
  12. ip数据库java,java实现对纯真IP数据库的查询
  13. 嵌入式文件系统固件img制作与解包
  14. Noteability和GoodNotes日常使用细节对比
  15. 怎么给图片添加贴纸?介绍几个简单的方法
  16. OpenLDAP配置坎坷路
  17. 别人群里发优惠券是怎么来的_教你自己发优惠券?
  18. kettle连接sqlserver报错
  19. 洛谷 P4859 已经没有什么好害怕的了 解题报告
  20. 闰年的判断(python)

热门文章

  1. 每天干的啥?(2018.09)
  2. SD卡检测插入卡槽方案
  3. 毫无疑问计算机犯罪是一个很严重的问题英语,英语四级作文高分句型
  4. android xml图片缩放,Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码...
  5. iOS 快速接入腾讯虚拟人特效 Avatar
  6. java将“2018年4月8日”转换成正常日期:2018年04月08日
  7. 商场wifi覆盖方案
  8. Qbao Network 1024周年庆, 邀请Q 宝宝和金主爸爸来抱锦鲤啦!
  9. 计算机用户名名称和全民,修改电脑名字_修改电脑用户名
  10. debugx5.qq.com清除微信浏览器缓存