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

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良师益友的Android应用开发视频教程。

你也可以使用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应用开发的知识、技巧请关注e良师益友网。

android裁剪界面阴影层,Android应用之定义阴影和裁剪视图技巧相关推荐

  1. android启动界面修改工具,Android 系统界面调节工具使用及功能

    Android 系统界面调节工具(Android System UI Tuner)是个隐藏功能,里面有一些实验性功能,可以辅助平时开发. 1. 打开 系统界面调节工具是个隐藏功能,打开他说简单也简单, ...

  2. android中界面滑动延伸,android中ViewPager详解--视图滑动、界面卡等效果 (三)

    GuideActivity.java引导界面: import java.util.ArrayList; import java.util.List; import android.app.Activi ...

  3. android 按钮加上蒙层,Android PopupWindow增加半透明蒙层

    本文实例为大家分享了Android PopupWindow增加半透明蒙层的具体代码,供大家参考,具体内容如下 先看效果图: 实现代码: BasePopupWindowWithMask.class pa ...

  4. android ui界面组件,说说 Android 的常见 UI 控件

    这些控件都有一些共有属性,让我们来看看吧: 共有属性 说明 android:id 唯一标识符 android:layout_width 宽度 android:layout_height 高度 andr ...

  5. android ndk 界面开发教程,Android NDK开发之入门教程

    JNI(Java Native Interface, Java本地化方法)使得Java能与其它语言(如C.C++)的动态库进行交互. 在Android 项目中,经常看到地图,统计,推送之类的第三方平台 ...

  6. android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题

    在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面.随着 ...

  7. android 关机界面修改,修改Android关机界面

    在Android系统中,长按Power键默认会弹出对话框,可以你选择"静音","关机","重启"等功能. 弹出对话框的代码位于: frame ...

  8. android 登陆界面动画,【Android开发】动画登录页面

    心得感悟 这个Demo对我还是比较有难度的,花了好久去理解.因为动画比较有趣,所以想自己改改样式,也有助于自己的理解.这是进入Android开发学习第六天了,每天的学习都是懂了很多,却还有很多不懂,还 ...

  9. Android编写界面交互代码,android仿音悦台页面交互效果实例代码

    概述 新版的音悦台 APP 播放页面交互非常有意思,可以把播放器往下拖动,然后在底部悬浮一个小框,还可以左右拖动,然后回弹的时候也会有相应的效果,这种交互效果在头条视频和一些专注于视频的app也是很常 ...

最新文章

  1. MD5与Base64的思考
  2. modelsim-win64-10.4-se 破解(win7实验成功)(其他操作系统也可参考,大同小异)
  3. 读取Assets中文件的内容
  4. eclipse 插件 ---Android 模拟器genymotion安装(整理)
  5. 北京大学数字视频编解码技术国家工程实验室开源AVS2高清实时编码器
  6. set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家
  7. crash recovery mysql_InnoDB crash recovery 完整过程
  8. Makefile赋值符号的使用——= := ?= +=
  9. python填充颜色规则_Python填充任意颜色,不同算法时间差异分析说明
  10. 如何在升级数据表的同时保留原数据
  11. css修改layui的下拉框样式 js_layui的安装以及简单操作
  12. rewind java_Java LongBuffer rewind()用法及代码示例
  13. EasyUI Tree添加节点
  14. 常见数据库url和driver
  15. Python 面向对象编程(一)
  16. 改变PCM音量的JAVA代码
  17. AutoCAD 2019 mac中文
  18. 北京/西安内推 | 中国移动研究院NLP组招收自然语言处理算法实习生
  19. SpringBoot 2.3 新特性之优雅停机
  20. 目前网络环境介绍目前网络环境

热门文章

  1. 2015年北京师范大学新生程序设计竞赛题解
  2. 网军与黑产组织百科全书2.0
  3. 腾讯云存储2022年终回顾,感谢您的一路相伴
  4. 武汉平均工资水平出来了,你拖后腿了吗
  5. Mac电脑用的DVD刻录软件
  6. Hadoop详细解析
  7. 区块链游戏对计算机硬件要求,3060显卡挖矿对主板要求
  8. c4d阿诺德渲染器怎么安装?c4d阿诺德渲染器安装激活图文教程
  9. 去找工作被问为什么离职?我能说部门优化,被解雇了嘛?
  10. Centos6解决You could try using --skip-broken to work around the problem,rpm -Va --nofiles --nodigest问题