Android应用之定义阴影和裁剪视图技巧

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

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良师益友网

时间: 2024-08-07 07:08:08

Android应用之定义阴影和裁剪视图技巧的相关文章

创建Material Design风格的Android应用--定义阴影和裁剪视图

之前已经写过通过应用主题和使用ListView, CardView,应用Material Design样式,同时都都可以通过support library向下兼容.今天要写的阴影和视图裁剪,无法向下兼容,请注意. ?Material Design 为用户界面元素引入了深度这个元素.深度帮助用户理解各个元素之间的重要关联和帮助用户关注他们手上的任务. 视图的高度(elevation),通过Z属性表现,通过他的阴影确定:z值更高的视图投影出更大的阴影.视图只在Z=0的平面上投影处阴影:他们不会投影阴

Android Meterial Design-Defining Shadows and Clipping Views(定义阴影和裁剪视图)-(四)

转载请注明出处:http://blog.csdn.net/bbld_/article/details/40539131 Material Design引入了深度的UI元素.深入帮助用户了解每个元素的相对重要性,并把注意力集中到手头上正在做的事情. 一个视图(控件),由Z属性表示的高程(elevation),决定了它的影子的大小:有更高的Z值得视图就具有更大的阴影.视图仅仅只投下在Z=0平面上的阴影:它们并不投影在在它们下面和上面Z=0平面的其它视图中. 具有较高Z值视图(控件)会挡住较低Z值的视

创建Material Design风格Android应用--自定义阴影和裁剪视图

之前已经写过通过应用主题和使用ListView, CardView,应用Material Design样式,同一时候都都能够通过support library向下兼容.今天要写的阴影和视图裁剪.无法向下兼容.请注意. ?Material Design 为用户界面元素引入了深度这个元素.深度帮助用户理解各个元素之间的重要关联和帮助用户关注他们手上的任务. 视图的高度(elevation).通过Z属性表现,通过他的阴影确定:z值更高的视图投影出更大的阴影.视图仅仅在Z=0的平面上投影处阴影:他们不会

Android(Lollipop/5.0) Material Design(四) 定义阴影和裁剪View

官网:https://developer.android.com/intl/zh-tw/training/material/shadows-clipping.html Material设计为UI元素引入了一个depth值,depth帮助用户了解每个元素相对重要性,重点关注手头的任务 每个View的elevation值,相当于z属性,它决定了阴影的大小:z越大,阴影越大. Views仅仅在z=0的平面时才会投影:它们不会投影在放置在它们下面和上面的的其他Views上. 使用较高z值的Views会阻

ANDROID L——Material Design详解(视图和阴影)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: 昨天凌晨Google刚刚确认Android L就是Android Lollipop(5.0). Google之前就已经提前推出了Android L Developer Preview(开发者预览版)来帮助开发者更快的了解Android特性,而不久前也推出了64位的模拟器镜像,而且首次搭载Android L系统的Nexus 6和 Nexus 9也即将上市. 相信And

CALayer设置阴影以及裁剪图片

在子视图上面显示图片,让父视图作为子视图的阴影,但是当设置圆角之后,图片的四周需要裁剪,当裁剪之后就会连同阴影一起裁剪掉了,这里实现的方法是当裁剪的时候任然保留原先的父视图,也就是保留阴影效果,具体思路是这样的,请参考以下代码可以帮助好好理解. //设置阴影和圆角 //1 父图层(负责显示阴影) CALayer *shadowLayer = [[CALayer alloc]init]; shadowLayer.frame = CGRectMake(10, 300, 300, 200); shad

使用Kotlin开发Android应用(IV):自定义视图和Android扩展

使用Kotlin开发Android应用(IV):自定义视图和Android扩展 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 在读完扩展函数和默认值这篇文章之后,那么接下来要介绍什么呢?在本系列第一篇文章中我们说过,Kotlin使得Android开发更加简单,本文我们将进一步作介绍. 自定义视图 你应该还记得,在说到Kotlin的局限性时,我们提到了在Kotlin早期版本(M10之前)是不支持自定义视图的,因为当时只能为每个类创建一个构造函数.这通常是足够的,

Android拍照、相册选取、裁剪图片

来自:http://blog.csdn.net/ryantang03/article/details/8656278 package com.example.listactivity; import java.io.ByteArrayOutputStream; import java.io.File; import com.example.model.ImageTools; import android.app.Activity; import android.app.AlertDialog;

【Android】9.2 内置行视图的分类和呈现效果

分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 Android内置了很多行视图模板,在应用程序中可直接使用这些内置的视图来呈现列表项. 要在ListView中使用内置的行视图呈现列表项,只需要通过Android.Resource.Layout类的属性指定资源的ID即可.例如: public class MainActivity : Activity { -- protected override void OnCreate(Bundle bundle) {