转载请注明出处:http://blog.csdn.net/bbld_/article/details/40539131

翻译自:http://developer.android.com/training/material/shadows-clipping.html

Material Design引入了深度的UI元素。深入帮助用户了解每一个元素的相对重要性。并把注意力集中到手头上正在做的事情。

一个视图(控件),由Z属性表示的高程(elevation),决定了它的影子的大小:有更高的Z值得视图就具有更大的阴影。视图只只投下在Z=0平面上的阴影;它们并不投影在在它们以下和上面Z=0平面的其他视图中。

具有较高Z值视图(控件)会挡住较低Z值的视图。可是,一个视图的Z值并不会影响到该视图的大小。

当控件临时越过平面视图运行某些操作时,高程对创建动画是实用的。

在你的视图(控件)中指定高程(elevation)

一个视图的Z值由两部分组成:高程和转换。高程是静态分量。转换是用于动画的。

Z = elevation +translationZ

图一:具有不同elevation属性值的视图控件的阴影

要在布局中设置视图控件的高程,使用android:elevation属性。

要在代码中去设置视图的高程,使用View.setElevation()方法。

要设置一个视图的转换(translation)。使用View.setTranslationZ()方法。

新的ViewPropertyAnimator.z()ViewPropertyAnimator.translationZ()方法能让你轻松地进行视图高程的更改。欲了解很多其它的信息,请參阅请參阅ViewPropertyAnimator的API文档PropertyAnimation(属性动画)的开发人员指引。

你也能够使用StateListAnimator以声明方式来指定这些动画。

对于当状态改变时触发动画的一些情况,这是特别实用的,比方用户按下了一个button。

很多其它的信息,请參阅Animate
View State Changes(Defining Custom Animations(自己定义动画))

Z值是像X和Y值那样。在同一个(图形)单位中測量的。

自己定义视图阴影和轮廓

一个视图的背景绘制决定了其阴影的默认形状。

轮廓表示图形对象的外部形状,并限定了触摸反馈的波纹(ripple)区域。

请看以下的视图(TextView),定义了背景的图片资源:

<TextView
android:id="@+id/myview"
...
android:elevation="2dp"
android:background="@drawable/myrect" />

背景资源被定义为带有圆角的矩形。

<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#42000000" />
<corners android:radius="5dp" />
</shape>

该视图控件蒙上了带有圆角的阴影。由于背景图片资源定义了这个视图的轮廓。

提供自己定义的轮廓去覆盖视图阴影的默认形状。

在你的代码中自己定义视图的轮廓:

1. 继承ViewOutlineProvider

2.  重写getOutline() getOutline()方法

3.  使用View.setOutlineProvider()方法分配新的轮廓给你的视图

通过Outline类里的方法,你能够创建带圆角的椭圆和矩形形状。视图的默认轮廓提供者(provider)是从视图的背景来获得其轮廓的。为了防止为视图蒙上阴影。设置它的轮廓提供者为空。

裁剪视图

裁剪视图能让你轻松地改变视图的形状。你能够为了一致性而使用其他的设计元素裁剪视图或者为了响应用户的输入改变视图的形状。你能够使用View.setClipToOutline()方法或者使用android:clipToOutline属性来裁剪视图自己的轮廓形状。仅仅有矩形、圆形、圆角矩形的轮廓支持裁剪,这是由Outline.canClip()方法来决定的。

为了裁剪视图得到指定的形状的图像资源,设置视图的背景资源(如上面所看到的)。并调用View.setClipToOutline方法。

裁剪视图是一个代价较高的操作,所以不要使形状看起来生动而去裁剪视图。实现这种效果你应该使用Reveal Effect(Defining Custom Animations(自己定义动画))动画。

demo比較简单,就上面的两片代码就不贴上来了。

Android Material Design-Defining Shadows and Clipping Views(定义阴影和裁剪视图)-(四)的更多相关文章

  1. Creating Apps With Material Design —— Defining Shadows and Clipping Views

    View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...

  2. Material Design系列第四篇——Defining Shadows and Clipping Views

    Defining Shadows and Clipping Views This lesson teaches you to Assign Elevation to Your Views Custom ...

  3. Android Material Design 兼容库的使用

    Android Material Design 兼容库的使用 mecury 前言:近来学习了Android Material Design 兼容库,为了把这个弄懂,才有了这篇博客,这里先推荐两篇博客: ...

  4. Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决

    Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决 附录1的Android Ripple Effect水 ...

  5. Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计

     Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计 Android Ripple Effect波纹荡漾效果,是Android Materia ...

  6. Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout

    如果是为了兼容低版本的Android系统,则需要引用Android Material Design的扩展支持库,我在之前的一篇文章张,较为详细的说明了如何导入Android Material Desi ...

  7. MaterialEditText——Android Material Design EditText控件

    MaterialEditText是Android Material Design EditText控件.可以定制浮动标签.主要颜色.默认的错误颜色等. 随着 Material Design 的到来, ...

  8. Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果

    前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--Navigation ...

  9. Android Material Design(一)史上最全的材料设计控件大全

    主要内容: 本文将要介绍Material design和Support library控件,主要包括TextInputLayout.SwitchCompat.SnackBar.FloatingActi ...

随机推荐

  1. C语言中<CR>是什么意思

    在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.Dos和windows采用回车+换行CR/LF表示下一行, 而UNIX/Linux采用换行符LF表示下一行,苹果机(MAC OS ...

  2. win2008 安装 配置 mysql

    安装的是windows Server 2008 R2 操作系统  按照国际管理,安装了数据库 MYSQL 5.0.    一路顺利,可以通过外部连接MYSQL的时候出现了问题,无论如何也连接不上  发 ...

  3. JAVA常见算法题(二十)

    package com.xiaowu.demo; /** * * 打印出如下图案(菱形) * * * * @author WQ * */ public class Demo20 { public st ...

  4. 读取Properties文件简易代码

    public class Utils { private static Properties props = new Properties(); static { ClassLoader classL ...

  5. 【转】VirtualBox网卡设置

    原文: https://blog.csdn.net/jwpker/article/details/45870903 ------------------------------------------ ...

  6. 甲骨文Java Archive

    甲骨文Java Archive 甲骨文Java Archive提供自助下载访问我们的一些历史的Java版本. 警告: 这些旧版本的JRE和JDK来帮助开发人员提供了在旧系统调试问题. 他们没有更新最新 ...

  7. Word文档打不开怎么办

    目前一些主流的办公软件给大家日常工作带来了很大便利,比如:Microsoft Office或金山WPS!我们在愉快地使用它们的同时,多少也遇到了一些让人尴尬或头疼的问题,比如:精心制作的文档,突然打不 ...

  8. 【HTML 元素】嵌入图像

    img元素允许我们在HTML文档里嵌入图像. 要嵌入一张图像需要使用src和alt属性,代码如下: <img src="../img/example/img-map.jpg" ...

  9. hibernate学习系列-----(4)hibernate基本查询上篇:HQL基本查询

    紧接着上一篇,今天继续hibernate的学习总结,来聊一聊hibernate的基本查询方法,先说说HQL(hibernate Query Language):它是官方推荐的查询语言.在开始写代码之前 ...

  10. ubuntu12.04 下安装nodejs

    liunx里面安装nodejs我也找了非常多文章,貌似对非常多liunx新手来讲不是非常清楚,以下是我结合一些文章,亲自实践得到的安装步骤.同一时候还有大家关心的与seajs紧密相关的spm模块的安装 ...