zoukankan      html  css  js  c++  java
  • Material Design说明

    原文链接: Material Design

    引言

      我们挑战自我,为用户创造了一种视觉语言,综合了好设计的经典原则,革新以及科技的可能性。这就是material design。这份说明是一个动态的文档,会随着我们持续开发material design的原则和特性而更新。


    内容


    目标

      创造一种视觉语言,综合良好设计的经典原则,革新以及科技的可能性。

      开发一个单一的底层系统,提供跨平台和设备尺寸的统一体验。移动性是根本,但触摸,语音,鼠标和键盘都是第一层级的输入方法。


    原则

    • Material 是一种隐喻

      Material的隐喻是关于合理化的空间和系统化的操作的统一理论。 Material扎根于可知觉的现实中,受到对纸和墨的研究的启发,然而在技术上是先进的,同时对想象的魔力开放。

      Material的表面和边缘提供了立足于现实的视觉线索。对熟悉的触觉属性的使用,帮助用户快速理解功能可见性。然而Material的灵活性还创造了一种新的功能可见性,超越了物理世界已存在的那些,同时又没有打破物理法则。

      光线,表面和运动的基调是传达物体如何移动、交互、在空间中存在及其相互关系的关键。现实风格的光线显示出缝隙,区分开空间,指示出可活动的部件。


    • 大胆的,形象的和故意的

      基于印刷体的设计排版的基础元素,如网格,空间,比例,颜色和由意象引导的视觉处理,这些元素所能做到的远远不止愉悦眼球。它们创造了层级,意蕴和焦点。深思熟虑的颜色选择,边缘间的意象,大比例的排版和有意的留白创造了一种大胆而形象的界面,让用户沉浸于使用体验之中。

      对用户行为的强调使得核心功能立刻可见,为用户提供了路标。


    • 动作提供了意义

      动作尊重和强化用户作为主要移动者的地位。最初的用户行为是开始动作的转折点,转变着整个设计。

      所有的行为都在单一环境中发生。客体在不打断用户体验的持续性的情况下呈现给用户,即使它们在转换和重组。

      动作是有意义的和合理的,为集中注意力和维持持续性服务。反馈是微妙但清晰的。转换是有效而连贯的。


    什么是Material? —— 环境


    内容


    3维世界

      Material环境是一个3维空间,这意味着所有的客体都有x、y和z轴的尺度。z轴与显示平面正交,正的z轴方向向观察者处延伸。每一片Material占据z轴上的一个单一位置,并有一个标准的1dp厚度。

      在网页上,z轴是用来分层而不是透视。3维世界是通过操纵y轴而模仿出来的。


    光线和阴影

      在Material环境中,虚拟的光线照亮了整个场景。关键的光线创造出有向的阴影,同时环绕的光线创造出全角度的柔和阴影。

      在Material环境中,阴影是由两种光源投射出来的。在Android开发中,当z轴上不同位置的material挡住光源时,会产生阴影。在网页上,阴影仅通过操纵y轴位置描绘出来。下面的例子显示了一张高度为6dp的卡片产生的阴影。


    什么是Material? —— Material的性质


      Material拥有特定的不可变特性和内在的行为。理解这些特质会帮助你用与Material设计相一致的方式来操控Material。

    内容


    物理属性

      Material有不同的x和y轴尺寸(用dp衡量),和统一的厚度(1dp)。

    • Material的高度和宽度可以不等。

    • Material的高度应该始终是1dp。


      Material会投射阴影。

      阴影是由Material元素之间的高度差(z轴)自然的造成的。

    • 阴影描述了Material元素间的相对高度。

    • 永远不要通过给Material着色来近似估计阴影。


      内容在Material上显示,可以是任何形状或颜色。内容不会给Material增加额外的厚度。

    • Material可以显示任何形状和颜色。

      内容可以独立于Material运作,但被限制在Material的边界之内。

    • 内容的行为可以不依赖Material的行为。

      Material是立体的。

      输入事件不能穿过Material。

    • 输入事件只会影响前台Material。

    • 输入事件无法穿过Material。


      多个Material元素不能同时占据空间中的同一点。

    • 使用高度来区分不同的Material元素是一种防止多个Material元素占据空间中同一点的方法。

    • 多个Material元素无法同时占据空间中的同一个点。


      Material不能穿过另一个Material。

      例如,当改变高度时,一片Material不能穿过另一片Material。

    • Material不能越过另一个Material。

    Material的转换

      Material可以改变形状。

    • Material可以改变形状。

      Material可以沿着它所在的平面变大或缩小。

    • Material尽能沿其所在平面变大或缩小 。

      Material永远不会弯曲或折叠。

    • Material永远不弯曲或折叠。

      多片Material可以合并到一起变成一片Material。

    • 多片Material可以合并成一片。

      当分割时,Material可以恢复。例如,如果你去掉一片Material中的一部分,该片Material会再次变成一整片。

    • Material可以分割和重新恢复完整。

    Material的移动

      Material可以自发的在环境中的任何地方产生或者销毁。

    • Material可以自发的产生或者销毁。

      Material可以沿着任何轴移动。

    • Material可以沿着不同的轴移动。

      z轴的运动典型来说是用户和Material交互的结果。

    • z轴的运动由用户交互引起。

    什么是Material? —— 高度和阴影

      在Material Design中的客体拥有和物理世界中的客体类似的性质。在物理世界中,物体可以堆叠或者粘贴到另一个物体上,但不能穿过别的物体。物体可以投射阴影和反射光线。

      这些性质组成了用户熟悉的空间模型,可以跨不同应用一致的使用。高度和阴影的概念可以巩固这一空间模型。


    内容


    高度(Android)

      高度是指相对深度,或者沿z轴的两个表面之间的距离。

    说明:

    • 高度的计量单位和x、y轴一致,典型来说是用密度无关像素(dp)。因为Material元素拥有厚度(所有的Material都是1dp厚),高度的测量方法是从一个表面的顶部到另一个表面的顶部。

    • 子对象的高度是相对于父对象的高度来说的。


    静止高度

      所有的Material对象,不论其尺寸是多少,都有一个静止高度,或者说不变的默认高度。如果一个对象的高度被改变了,它应该尽快地会到其默认高度。

    组件高度
    • 组件类型的静止高度应该是跨应用一致的(例如,FAB的高度不应该在一个应用中是6dp而在另一个中是16dp)。

    • 组件在不同的平台中可以有不同的静止高度,这依赖于环境深度(例如,电视比手机或电脑的深度大)。

    响应深度和动态深度偏移

      有些组件类型拥有响应高度,意味着在响应用户输入(例如触摸或按下)或系统事件时,它们的高度会改变。这些高度的改变通过动态高度偏移一致的实现。

      动态高度偏移是组件移动的目标高度,相对于组件的静态状态来计算。它保证了对不同的操作和组件类型,高度的变化是一致的。例如,所有按下时会抬高的组件,相对于它们的静态高度来说都会有同样的高度变化。

      一旦输入事件完成或被取消,组件会回到它的静态高度。

    避免高度干扰

      拥有响应高度的组件,当它在静态高度和动态高度偏移之间移动时,可能会遭遇其它的组件。因为其它的Material不能穿过其它的Material,组件应该避免以任何方式干扰其它组件,不论是针对单个组件来说还是使用整个应用的布局。

      在组件水平上,组件可以在它们引发干扰之前移动或者被移除。例如,一个浮动操作按钮(FAB)可以在用户选取一张卡片时消失或者移动到屏幕后,或者在snackbar出现时移开。

      在布局水平上,设计你的应用布局,让发生干扰的机会最小。例如,将FAB放置在卡片流的旁边,这样当用户视图挑选一张卡片时,浮动操作按钮不会干扰。

    • 24dp: Dialog, Picker;

    • 16dp: Nav drawer, Right drawer, Modal bottom sheet;

    • 12dp: Floating action button(FAB-pressed);

    • 9dp: Sub menu(+1dp for each sub menu);

    • 8dp: Menu, Card(picked up state), Raised button(pressed state);

    • 6dp: Floating action button(FAB-resting elevation), Snackbar;

    • 4dp: App Bar;

    • 3dp: Refresh indicator, Quick entry/Search bar(scrolled state);

    • 2dp: Card(resting elevation), Raised button(resting elevation), Quick entry/Search bar(resting elevation);

    • 1dp:Switch.


    阴影


      阴影提供了关于物体深度和有向移动的重要视觉线索。它们是不同表面间所有间距的唯一视觉线索。一个物体的高度决定了它的阴影。

    • 没有阴影,无法表明FAB(floating action button)同背景的表面是分隔开的。

    • 锐利的阴影表明FAB和蓝色的薄片是单独的元素。然而,它们的阴影如此类似,这意味着它们有同样的高度。

    • 更柔和,更大的阴影表明FAB的高度比拥有锐利影子的蓝色薄片高。


      对于动作,阴影提供了有用的线索,来表明物体的移动方向,以及表面间的距离是增加了还是减少了。

    • 没有阴影来表明高度,无法确定方块是增加了尺寸还是增加了高度。

    • 当物体高度增加时,阴影变得更柔和,面积增大;反之,阴影会变得锐利,面积缩小。

    • 一致的阴影帮助用户理解,物体是在改变形状而不是改变高度。


    物体间关系


    物体层级

      在一个应用中,你组织物体或物体集合的方式决定了它们之间如何互相移动。物体可以独立于其它物体移动,也可以被高层级的物体约束着移动。

      所有物体都是一个用父子关系来描述的层级中的一部分。每一个这些关系中的“儿子”都是它的“父”元素的从属元素。物体可以是系统或者其它物体的子元素。


      父子关系的特性:

    • 每一个物体都有一个父元素。

    • 每一个物体可以有多个子元素。

    • 子元素继承父元素变化的属性,例如位置,旋转,缩放和高度。


    例外

      父元素是根元素的项目,例如主要的UI元素,会独立于其他物体移动。例如,FAB不会随着内容滚动。其它元素包括:

    • 应用的侧边导航抽屉。

    • 状态栏。

    • 对话框。


    交互

      物体之间如何交互是由它们在父子层级中的位置决定的。

      例如:

    • 子元素同它们的父元素间有最小的z轴间距,其它物体不能插入到父子之间。

    • 在滚动的卡片集中,卡片之间是同级的,所以它们串联在一起移动。它们都是控制其动作的卡片集的子元素。


    高度

      你如何决定物体的高度——它们在z轴上的位置——取决于你想表达的内容的层级,以及该物体是否需要独立于其它物体运动。

    • 当作为其父元素的薄片滚动时,凸起的按钮(它的子元素)随之一起滚动到屏幕外。

    • 当卡片集滚动到屏幕外,它的子卡片随之一起滚动到屏幕外。但FAB保留在原位置因为它的父元素没有滚动。


    动画——真实的动作


      正如物体的阴影表明了它可能具有的行为,观察一个物体移动可以发现它的轻重,是灵活还是僵硬,以及大小。在Material Design的世界,动作美妙而流畅地表现了空间关系,功能性以及意图。


    内容


    质量和重量

      在物理世界,要移动物体,必须给它施加力的作用。力的强度和持续时间决定了物体能多快地加速,减速或者改变方向。即使最突然的停止和启动都不是瞬时的,因为物体加快或者放慢速度都需要时间。因此,当动画突然的开始,结束或者改变方向,它们会显得不自然。

      在Materiald Design中的动作应该包含人们熟知的,真实世界中物体的行为,同时又不牺牲优雅,简洁和美观。


    自然的加速和减速

      在动画的持续时间中,加速和减速的变化应该是平滑的。

      如果为了特定目的要让一个物体吸引注意力,或者给动画增加特性,就让它开始和结束时速度的变化多样化。

    • 不对称的加速和减速创造出更自然,更让人愉快的动作。

      当加速或减速是不平滑的,移动会显得很机械。速度或者方向上突然的改变是不和谐和引人注目的。

    • 避免线性地移动。

    进入和退出

      物体速度和方向的变化会引起用户的注意。

      当物体进入和退出边框时,它速度的改变暗示了它将会移动的距离。例如,当退出时减速会引起注意,并表明物体将会停在框架的边缘。

      在转换期间,特别要考虑的是,进入和退出的哪一部分应该得到最大的关注。

    • 球速度的改变强调了它到达和离开其静止位置。当球以近似常量的速度进入和退出框架时,注意力是最小化的。

    • 进入时加速,退出时减速,会吸引不想要的关注,扰乱用户。


    关于easing这一概念


      在谈及时间曲线时,理解所用的定义是很重要的。“缓入”和“缓出”的概念在传统动画和UX动画中都用到了,取决于上下文,这些概念有相对的意义。

    传统动画

      传统动画通过绘制关键姿态来表现一系列的动作。在这一上下文中,缓出指的是离开一个姿态的动作,缓入指的是进入一个姿态的动作。

      现代动画工具用“关键帧”来描述这些关键姿态,在这个上下文中,缓入和缓出指的是引入和引出一个关键帧的动作。

    UX动画

      在UX的语境中,easing指的是状态间的转换。因此,缓入指的是进入一个状态的动作,而缓出指的是离开一个状态的动作。


    做出调整

      不是所有的物体都用同样的方式移动。更轻和更小的物体可能会移动得更快,因为它们需要的力较小,而大和重的物体可能需要更长的时间去加速。

      使用曲线型的动作,避免线性的空间路径。找出你的物体最适合的动作特质,然后相应地描绘它们的动作。曲线代表了在一个特定取值范围内随时间的变化。找出符合你所描述的动作的特性的曲线。

  • 相关阅读:
    Tornado入门2
    Tornado框架入门
    Nginx下载及安装
    串口通信工程笔记一
    串口通信工程笔记之协议设计
    串口通信之并发与单步
    串口通信属性及事件解析
    串口通信之超时
    VC程序Debug版本和Release版本运行不一致问题
    串口通信之DataReceive事件触发时机
  • 原文地址:https://www.cnblogs.com/yuanchongjie/p/4846305.html
Copyright © 2011-2022 走看看