博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应用之定义阴影和裁剪视图技巧
阅读量:5159 次
发布时间:2019-06-13

本文共 1516 字,大约阅读时间需要 5 分钟。

今天要写的阴影和视图裁剪,无法向下兼容,请注意。

Material Design 为用户界面元素引入了深度这个元素。深度帮助用户理解各个元素之间的重要关联和帮助用户关注他们手上的任务。

视图的高度(elevation),通过Z属性表现,通过他的阴影确定:z值更高的视图投影出更大的阴影。视图只在Z=0的平面上投影处阴影;他们不会投影阴影在其他放在下面的视图上面和高于z=0的平面。

有更高Z值的视图挡住Z值较低的视图。无论如何,Z值不会影响到View的大小。

高度也是有用的,当在执行一些动作的时候创建动画让组件升起。

为视图分配高度

一个View的Z值有两个组成部分,elevation(高度)和translation(平移).elevation是一个静态部分,translation 用于动画:

Z = elevation + translationZ

 

不同高度的视图的阴影

在布局文件中设置evelation 使用android:elevation,在代码中使用View.setElevation()方法。

设置一个视图的平移,使用View.setTranslationZ()方法。

新的方法ViewPropertyAnimator.z()和ViewPropertyAnimator.translationZ()可以让你更容易的变动视图的高度。更多的信息,看e良师益友的。

你也可以使用StateListAnimator方式定义这些文件在xml文件中。特别适用于,状态改变时执行的动画,比如用户点击按钮。更多信息,请看动画视图状态改变,下次在动画一节讲。

Z值在测量上使用和X,Y值一样的单位。

自定义视图阴影和轮廓

视图的背景边界决定了阴影的默认形状。轮廓(Outlines)代表了图形对象的外形状,并确定了对触摸反馈区的波纹。

看这个视图,定义一个背景Drawable:

 

背景是一个圆角矩形

 

当这个背景drawable作为视图的轮廓,视图投射出圆角阴影。提供一个自定义的轮廓,可以覆盖默认视图阴影的形状。

在自己的代码中自定义一个轮廓:

1.继承ViewOutlineProvider类

2.重写getOutline()方法

3.在视图中设置轮廓,使用View.setOutlineProvider()方法

你可以创建椭圆和圆角矩形轮廓使用OutLine类中的方法。视图默认的outline provider会根据视图的背景来生成轮廓。可以设置视图的outline provider为null,来阻止投射阴影。

裁剪视图

裁剪视图功能,可以让你更容易的改变视图的形状。你可以裁剪视图为了和其他的设计元素保持一致,或者改变成形状响应用户的输入。你可以裁剪一个视图的轮廓使用View.setClipToOutLine()方法,或者android:clipToOutline属性。只有矩形,圆角矩形,圆圈的轮廓支持被裁剪,可以使用Outline.canClip()方法检测是否支持被裁剪。

裁剪视图到一个drawable的形状,设置drawable作为视图的背景(让视图显示在其上),并且调用View.setClipToOutline()方法。

裁剪视图是一个耗费的操作,裁剪视图时不要使用形状动画。达到这种效果,请使用Reveal Effect 动画(下节讲)。

总结

上面可以看到,设置阴影很简单:

设置eleavation值。

添加背景或者设置一个outline.

更多关于Android应用开发的知识、技巧请关注。

转载于:https://www.cnblogs.com/xiaoxiao1/p/4067196.html

你可能感兴趣的文章
IntelliJ IDEA 开发swing(二)
查看>>
十五天精通WCF——第十二天 说说wcf中的那几种序列化
查看>>
【.net深呼吸】动态类型(高级篇)
查看>>
javascript运算符整理
查看>>
消除类游戏(js版)
查看>>
【javascript基础】5、创建对象
查看>>
跟我一起学习ASP.NET 4.5 MVC4.0(六)
查看>>
IBM RSA (IBM rational software architect ) V8 学习之六 C++类模板设计
查看>>
SQL SERVER 2008 EXPRESS版本远程连接(tcp/ip)
查看>>
asp.net开源CMS推荐
查看>>
查询数据库里有多少张表、视图、存储过程
查看>>
Python和qqbot库开发简单的机器人
查看>>
Smarty foreach添加论坛楼层计数(counter)
查看>>
BOM之history对象(转)
查看>>
maven项目正常运行,项目图标打红叉叉解决方法(个人笔记)
查看>>
软件工程(2018)第二次团队作业
查看>>
GoLang执行需要输入密码的命令
查看>>
一款古老的 Scheme 编译器,一台古老的“机器”
查看>>
Centos 配置eth0 提示Device does not seem to be present
查看>>
值类型,引用类型,装箱,拆箱
查看>>