Android Material Design-Defining Shadows and Clipping Views(定义阴影和裁剪视图)-(四)
转载请注明出处: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(定义阴影和裁剪视图)-(四)的更多相关文章
- Creating Apps With Material Design —— Defining Shadows and Clipping Views
View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...
- Material Design系列第四篇——Defining Shadows and Clipping Views
Defining Shadows and Clipping Views This lesson teaches you to Assign Elevation to Your Views Custom ...
- Android Material Design 兼容库的使用
Android Material Design 兼容库的使用 mecury 前言:近来学习了Android Material Design 兼容库,为了把这个弄懂,才有了这篇博客,这里先推荐两篇博客: ...
- Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决
Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决 附录1的Android Ripple Effect水 ...
- Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计
Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计 Android Ripple Effect波纹荡漾效果,是Android Materia ...
- Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout
如果是为了兼容低版本的Android系统,则需要引用Android Material Design的扩展支持库,我在之前的一篇文章张,较为详细的说明了如何导入Android Material Desi ...
- MaterialEditText——Android Material Design EditText控件
MaterialEditText是Android Material Design EditText控件.可以定制浮动标签.主要颜色.默认的错误颜色等. 随着 Material Design 的到来, ...
- Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果
前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--Navigation ...
- Android Material Design(一)史上最全的材料设计控件大全
主要内容: 本文将要介绍Material design和Support library控件,主要包括TextInputLayout.SwitchCompat.SnackBar.FloatingActi ...
随机推荐
- Creating and Flashing UBIFS with MTD Utils
转:http://wiki.atlas-embedded.com/index.php?title=Creating_and_Flashing_UBIFS_with_MTD_Utils Contents ...
- HashMap在高并发下引起的死循环
HashMap事实上并非线程安全的,在高并发的情况下,是非常可能发生死循环的,由此造成CPU 100%,这是非常可怕的.所以在多线程的情况下,用HashMap是非常不妥当的行为,应採用线程安全类Con ...
- [置顶]
python3 django models保存filefiled字段统一目录、不修改文件名的方法
最经编写一个model时处理filefiled,使用post_form.save()进行新增和编辑文件保存位置不统一,如果出现重复文件名重复的话,上传文件名会被改名. 现有代码如下: models.p ...
- js获取页面传来参数的方法
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- ES6中的迭代器(Iterator)和生成器(Generator)(二)
一.内建迭代器 迭代器是ES6的一个重要组成部分,在ES6中,已经默认为许多内建类型提供了内建迭代器,只有当这些内建迭代器无法实现目标时才需要自己创建.通常来说当定义自己的对象和类时才会遇到这种情况, ...
- bitcoin-qt忘记密码
客户端有钱包加密功能,输入密码可以增强安全性. 但是,如果你把钱包文件弄丢了,那即使设了密码,币也会丢. 关闭bitcoin-qt,把钱包文件wallet.dat 剪到其他地方(但不要删除),然后重新 ...
- 使用RAP搭建前端Mock Server
转载自:<前后端分离--构建前端Mock Server--windows部署rap>http://www.cnblogs.com/dothin/p/5361883.html mock:模拟 ...
- IO流(一)File类
1.File类:表示文件和目录路径的抽象的表示形式,可以实现文件的创建,删除,重命名等,是唯一与文件本 有关的操作类. 2.File类的API定义:public class File extends ...
- std::multimap 按照key遍历---
#include <iostream> #include <unordered_map> using namespace std; int main() { unordered ...
- js 判断是否包含
1.判断一个数组中是否包含某元素 arr.indexOf(val) > -1 // true 包含 false 不包含 arr.includes(val) // ES7 true 包含 fals ...