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

本文详细介绍了Android Material Design中阴影和高程的概念,包括如何在布局中设置视图控件的高程,自定义视图阴影和轮廓的方法,以及如何裁剪视图以改变其形状。

转载请注明出处: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以声明方式来指定这些动画。对于当状态改变时触发动画的一些情况,这是特别有用的,比如用户按下了一个按钮。更多的信息,请参阅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比较简单,就上面的两片代码就不贴上来了。











内容概要:本文提出了一种基于极端梯度提升(XGBoost)算法的光伏阵列复合故障诊断方法,并提供了完整的Python代码实现。该方法充分利用XGBoost在分类任务中的高性能优势,针对光伏系统中常见的多种复合故障(如阴影遮挡、组件老化、断路与短路等)进行精准识别与分类。通过构建合理的特征工程,结合实际运行监测数据,模型能够有效区分单一故障与多重并发故障,显著提升了诊断的准确性与鲁棒性。研究体现了数据驱动方法在新能源系统智能运维中的关键作用,展示了机器学习技术在光伏系统状态监测、故障预警与健康管理方面的广阔应用前景; 适合人群:具备一定Python编程能力及机器学习基础知识的科研人员、电气工程及相关专业的硕士/博士研究生,以及从事光伏电站运维、智能诊断系统开发的工程技术人才; 使用场景及目标:① 实现对光伏阵列多类型复合故障的自动化、高精度诊断;② 掌握XGBoost在工业故障诊断场景下的建模流程、参数调优与性能评估方法;③ 构建可推广的数据驱动型新能源设备健康管理系统,提升运维效率与系统可靠性; 阅读建议:建议读者结合所提供的Python代码,深入理解从数据预处理、特征提取、模型训练到结果可视化的完整流程,建议在实际光伏监测数据上进行迁移验证,并可进一步对比其他机器学习模型(如随机森林、SVM、深度学习网络),以优化诊断系统的泛化能力与工程适用性。
内容概要:本文围绕“【SCUC】N-1故障集+安全约束机组组合研究”展开,基于Matlab代码实现,深入探讨电力系统在N-1故障场景下的安全约束机组组合(SCUC)优化问题。研究聚焦于保障电网在单一元件故障后仍能安全稳定运行的能力,重点解决机组启停计划、出力分配与系统安全性之间的协调优化,涵盖YALMIP工具包建模、二阶锥规划(SOCP)、鲁棒优化等先进数学方法的应用。文档不仅提供完整的Matlab仿真代码建模流程,还结合实际电网案例进行求解分析,帮助研究人员高效复现高水平学术成果。此外,文中附带丰富的科研资源列表,涵盖智能优化算法、电力系统调度、机器学习预测、路径规划等多个前沿方向,构成一个综合性科研支持体系。; 适合人群:具备一定电力系统分析基础Matlab编程能力的研究生、高校科研人员及从事能源系统优化、电网调度等领域的工程师。; 使用场景及目标:①用于电力系统安全约束机组组合(SCUC)与安全约束经济调度(SCED)的教学与科研建模;②支撑N-1准则下的电网鲁棒性评估、故障场景构建与优化算法开发;③为撰写EI/SCI级别学术论文提供可复现的技术路线与代码支持。; 阅读建议:建议读者结合文档提供的网盘资源下载完整代码,关注公众号“荔枝科研社”获取配套资料,优先研读核心算法章节并动手运行与调试Matlab程序以深化理解,同时可参考文中列举的相关研究方向拓展课题选题与创新思路。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值