Material Design 为界面元素引入了高度。高度有助于用户了解每个元素的相对重要性,并让他们能够集中精力完成当前任务。
视图的高度(由 Z 属性表示)决定了其阴影的视觉外观。Z 值越大的视图投射出的阴影越大、越柔和,Z 值越小的视图将被遮挡。不过,视图的 Z 值不会影响视图的大小。
阴影是由提升的视图的父级绘制的。它们会进行标准视图裁剪,并且默认由父项裁剪。
此外,在创建其中微件在执行操作时暂时升至视图平面之上的动画时,高度也很有用。
如需了解详情,请参阅 Material Design 中的高度。
指定视图 Z 轴高度
视图的 Z 值包含两个组成部分:
- 高度:静态组件
- Translation:用于动画的动态组件
Z = elevation + translationZ
Z 值以 dp(密度无关像素)为单位。
如需设置某个视图的默认(静止)高度,请在 XML 布局中使用 android:elevation
属性。如需在 activity 的代码中设置某个视图的高度,请使用 View.setElevation()
方法。
如需设置视图转换,请使用 View.setTranslationZ()
方法。
ViewPropertyAnimator.z()
和 ViewPropertyAnimator.translationZ()
方法可让您为视图的高度添加动画效果。如需了解详情,请参阅 ViewPropertyAnimator
的 API 参考文档和属性动画开发者指南。
您还可以使用 StateListAnimator
以声明方式指定这些动画。当状态变化会触发动画时(例如当用户点按某个按钮时),这尤其有用。如需了解详情,请参阅使用 StateListAnimator 为视图状态变化添加动画效果。
自定义视图阴影和轮廓
视图的背景可绘制对象的边界决定了其阴影的默认形状。轮廓表示图形对象的外形,并用于定义触摸反馈的波纹区域。
我们来考虑以下视图,它使用背景可绘制对象进行定义:
<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>
视图会投射圆角阴影,因为背景可绘制对象将定义视图的轮廓。提供自定义轮廓会替换视图阴影的默认形状。
如需在代码中为视图定义自定义轮廓,请执行以下操作:
- 扩展
ViewOutlineProvider
类。 - 替换
getOutline()
方法。 - 使用
View.setOutlineProvider()
方法将新的轮廓提供程序分配给您的视图。
您可以使用 Outline
类中的方法创建带有圆角的椭圆形和矩形轮廓。视图的默认轮廓提供程序会从视图的背景中获取轮廓。如需阻止视图投射阴影,请将其轮廓提供程序设置为 null
。
剪辑观看次数
通过裁剪视图,您可以更改视图的形状。您可以裁剪视图以便与其他设计元素保持一致,也可以根据用户输入更改视图的形状。您可以使用 View.setClipToOutline()
方法将视图裁剪至其轮廓区域。只有矩形、圆形和圆角矩形的轮廓支持剪裁(由 Outline.canClip()
方法确定)。
如需将视图裁剪为可绘制对象的形状,请将可绘制对象设置为视图的背景(如上例所示),并调用 View.setClipToOutline()
方法。
裁剪视图是一项成本高昂的操作,因此请勿为用于裁剪视图的形状添加动画效果。如需实现这种效果,请使用揭露动画。