转载请注明出处: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. 把e.printStackTrace的堆栈信息打印在log.error()中

    不要这样写: log.error(e);这样只是简单的记录下错误的类型,不能精确出错误出错在哪行 要写成:log.error(e.toString(),e);

  2. dubbo官网和帮助文档

    dubbo官网和帮助文档 https://github.com/apache/incubator-dubbo 内含帮助文档: http://dubbo.apache.org/books/dubbo-d ...

  3. Java三大器之拦截器(Interceptor)的实现原理及代码示例

    1,拦截器的概念    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...

  4. Node.js node主文件找不到时报出的Error:Cannot find module异常

    如果执行>Node xx.js时,xx,js找不到的话,报出的错误是Error:Cannot find module 'c:/test/xx,js' 主文件名打错或者是点号打成逗号都会出这样的错 ...

  5. npm -D -S -g -i 以及安装技巧

    繁杂:npm install webpack 简洁:npm i webpack 重复性操作: npm i webpack npm i babel-core .... 简洁性操作: npm i webp ...

  6. 【Spring】使用Filter过滤请求

    原文:http://liujiajia.me/#/blog/details/spring-filter-request-with-filter public class CustomizedFilte ...

  7. PHP SPL库

    SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟.SPL 其实在所有的 PHP5 开发环境中被内置,同 ...

  8. cocos2d-x 3.0 场景切换特效汇总

    cocos2d-x 3.0中场景切换特效比較多,并且游戏开发中也常常须要用到这些特效.来使场景切换时不至于那么干巴,遂这里汇总一下,开发中使用. 场景切换用到导演类Directory,大多数用的都是替 ...

  9. rabbit 函数参数详解

    http://blog.csdn.net/chwshuang/article/details/50512057 http://www.cnblogs.com/LiangSW/p/6224333.htm ...

  10. .aspx 页面引用命名空间

    一.单个页面引用: <%@ Import Namespace="" %> 二.所有页面引用,Web.config配置如下: <system.web> < ...