------------------------------------------------------------------------------
GitHub:lightSky
微博: light_sky , 即时分享最新技术,欢迎关注
------------------------------------------------------------------------------
强烈建议移步GitHub项目 Awesome-MaterialDesign 用于收集Material Design的相关资源,会不定时更新,大家可以star或者fork提交自己的MaterialDesign的资源
前言
由于本文引用了大量官方文档、图片资源,以及开源社区的Lib和相关图片资源,因此在转载的时候,务必注明来源,如果使用资源请注明资源的出处,尊重版权,尊重别人的劳动成果,谢谢!
Material Design
官方Material Design详细介绍文档:http://www.google.com/design/spec/material-design/introduction.html
Material Design是Android 5.0系统的重头戏,并在以后App中将成为一种设计标准,而且随着已支持Android 5.0 Lollipop的Nexus 6的开售,Google希望开发者更快的支持Material Design,连续发了3篇文章,来帮助开发者如何在自己的App 中实现Material Design。并表示:expect Winter 2014 to be a big quarter for design on Android.
目前使用过的Material Design 的Google App有 Google Play,Inbox(相当的酷炫,大家可以申请Invite,当然也可以通过已经拿到Invite的朋友帮忙激活),显然Material Design是必然的趋势,Google Play上越来越多的应用开始支持Material Design,因此我觉得写这样一篇文章也变得迫不及待。
官方Blog关于Material Design的专题文章一共有三篇:
因为第一篇已经在刚发出的时候翻译过了:AppCompat V21:将 Materia Design 兼容到5.0之前的设备 ,现在我们要介绍的是后两篇文章,后两篇主要从整体设计介绍了一个标准的Material Design的App应该遵循哪些设计标准,并告诉你如何在你的代码中实现,并介绍了如何向前兼容。其实后两篇在整体结构上是差不多的,只是在Implementing material design in your Android app中,侧重的是Material Design的设计标准,而Material Design on Android Checklist则侧重的是实现细节和注意事项,重点强调的部分为Signature element,实现部分为InCode。
尽管每一篇文章经过了仔细的斟酌和措辞,但还是觉得有一些设计方面的专业词汇表达的不是很好。针对文章翻译,如果有更好的建议,欢迎提出。除了翻译外,该篇文章还有一部分重要的内容,就是收集 了关于Material Design的资源和GitHub上一些关于Material Design的开源库,让大家更快更好的在自己的App中,应用Material Design。废话不多说,上正文。
在你的App中实现Material Design
Material design 是一种达到可视化,交互性,动效以及多屏幕适应的全面设计。Android 5.0 Lollipop和已经更新的support libraries将会帮助你构建Material UI。这里提供了一些API和Widget帮助你实现MaterialDesign设计。表面的位置和深度导致了在亮度和阴影方面的微弱变化。新的elevation 属性允许你在Z轴上指定View的位置,然后框架会为该View底部的items加上实时的动态阴影。你可以在布局中明确的以dp为单位设置它的高度。
你也可以在代码中通过getElevation()/setElevation()设置。阴影是添加到轮廓上的,默认来自背景。比如,你可以设置一个圆形的drawable作为floating action button的 背景。它会自动转化成适当的阴影。如果你需要手指去控制一个View的阴影,可以设置一个ViewOutlineProvider,它允许你在getOutline()中提供一个自定义的Outline.
CardView继承自FrameLayout并提供了默认的elevation 和 圆角,使得cards在不同的平台间保持一致。你也可以通过cardElevation和cardCornerRadius属性自定义它们的值。注意,Cards不是唯一实现维度效果的方式,你应该警惕过度的使用Cards: http://www.google.com/design/spec/components/cards.html#cards-usage
Material Design 鼓励动态色彩的使用,特别是当你拥有丰富的iamge的时候。新的Palette的support library 支持从图片中抽取一小部分的色彩去设计你的UI。创造出一种更逼真的体验。你也可以添加动静的结合效果,比如前部的text color的变化,如下两种TextView部分色彩的切换:
…
album_details.xml
…
AlbumActivity.java
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
albumCoverImageView, // The view which starts the transition
transitionName // The transitionName of the view we’re transitioning to
);
ActivityCompat.startActivity(activity, intent, options.toBundle());
这里我们在两个不同的屏幕间定义了相同的transitionName 。当你启动一个新的Activity,它的切换将会自动的动画起来。对于进入和退出的元素,你可以自由编排。
Materials以一种泼墨的涟漪的方式响应用户的触摸事件。你可以通过使用或者继承Theme.Material主题,即可达到这种默认的效果。你可以通过简单的封装将这种ripple效果添加到自己的drawables上。自定义View应该使用 View#drawableHotspotChanged 回调方法把touch的位置传播到它们的drawables上,以便ripple可以知道起始点。
-
Materials 也响应了用户抬起手指的操作。类似磁铁吸引的效果。你可以通过tranlationZ属性实现。它类似于elevation属性,但主要是用于时间较短,转瞬即逝的效果,比如 Z = elevation + translationZ。这个新的stateListAnimator 属性允许你在用户touch的时候简单的在translationZ上动画。button默认会有这种效果。
anim/raise.xml
-
-
Animator reveal = ViewAnimationUtils.createCircularReveal(
viewToReveal, // The new View to reveal
centerX, // x co-ordinate to start the mask from
centerY, // y co-ordinate to start the mask from
startRadius, // radius of the starting mask
endRadius); // radius of the final mask
reveal.start();
运动应该是慎重的,平滑且精确的。而不是简单的渐入渐出。在 Material Design中,对象更倾向于快速的并舒适的启动。通过下面的示例可以看到,在将要到达终点前的那段位置花费了更少的时间。总的来说,用户不会等待较长时间,运动的负面效果就变得最小化了。有一种新的插值器,可以达到这种效果https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#fast_out_slow_in
对于进入和退出屏幕效果,请分别参考: linear-out-slow-in 和 fast-out-linear-in interpolators respectively.material 最终的核心概念是创建一种自适应于不同大小形状设备的设计,从手表到TV。自适应设计技术帮助我们实现了不同的设备但相同的底层系统体现为不同的View。每个View对那个设备来说,都是量身定做的。色彩,图片,层次,空间的相对关系都保持不变。material design 系统提供了便利的组件和模式帮你构建一个如此有扩展性的设计
Toolbar
与Actionbar很类似,但是更加方便,不同于标准的Action bar,toolBar就像View层级中的任何一个东西。因此你可以在任何地方进行放置,与其它的View交错,移动,对滑动事件的响应等等。你可以通过调用Activity,setActionBar()方法把ToolBar作为你的Activity的ActionBar.第二篇:Material Design Check List
主要从细节实现方面提醒你应该如何更好的实现Material Design,标注Signature element为强调部分,标注InCode的为实现方式。
因为用户将很快使用Android5.0系统了,而且也会慢慢习惯Material Design的app,比如Gmail的未来替代者inbox,Google Play Tumblr等,因此Google为了开发者能够更快的支持Material Design的app以及Android 5.0,连续推出了3篇文章。在下面这篇文章中,Google为我们提供了一个表单,这个表单列出了Material Design应该具备的一些风格。你在实现Material Design的时候,可以参照下面的表单。整个表单根据Material Design的4个关键方面分为4个部分。下面我们就介绍一下整个表单内容。如果你使用了以下中的几个模块,特别是标注为signature elements的元素,并遵循传统的Android设计最佳实践,那么你已经朝着迷人的Material Design设计迈进了。
Surfaces and layering.
阴影和表层被用于连贯和结构性的情景中。每一个阴影标示着一个新的表层,这些表层的构建需要细心和深思熟虑。一个屏幕中通常拥有2到10个表层,避免太多的内嵌层。可滑动的内容滑动到屏幕的边界或者另一个表层后面的时候铸造了一层覆盖在另一个表层上的阴影。永远不要剪裁一个可见边界的元素这样会导致一种没有边界的感觉。换句话说,你应该很少滑动表层上的内容,而是滑动整个表层。
In Code: 在使用ListView和ScrollView的时候,使用 android:clipToPadding=false 来避免边界的剪裁。
表层应该是简单,而且是纯色的背景。
Primary and accent colors.
Signature element: 使用material design的icon
icons 的使用请遵从 system icon guidelines,标准的icons请使用material design的icon,(这个已经在GitHub中开源)
向导:http://www.google.com/design/spec/style/icons.html#icons-system-iconsSignature element: 适当的尺寸
合适的地方,text内容,app titles,应该对齐3个keylines:
http://www.google.com/design/spec/layout/metrics-and-keylines.html#metrics-and-keylines-keylines-and-spacing
在手机上,那些 keylines 距离左边是16dp和72dp,距离屏幕右边缘是16dp。在平板上是24dp和80dp。UI元素的对齐方式和大小应该根据一个8dp的网格。比如,app bar在手机上为56dp,在平板上是64dp。Padding和Margins可以使用像:8dp,16dp,24dp的值等等,更精确的text位置是使用一个4dp的网格
Keylines
Signature element: "hero"切换动画
当你按下一个条目去看详情的时候。这里有个叫“hero”的切换动画,它会移动并且缩放它所在的位置和详情屏幕之间的条目。"Hero" Transiton
如果合适的话,App推荐floating action button作为一个屏幕上的关键操作。FAB是一个圆形外表,附带有阴影,表面色彩采用亮色,强调色。它可以用于执行一些主要的操作,比如,发送,撰写,创建,添加,或者搜索,大约8dp的elevation。通常悬浮在屏幕的右下角,或者边界的中心位置。
The floating action button
App Bar
Signature element:在适当的时候,往下滑的时候,app bar可以滑出屏幕,为内容留下更多垂直方向的空间。往上滑动的时候,app bar可以恢复显示。(这个式样:quickReturn)
Tabs
Signature element:Tabs应该遵从最新的 material design 设计风格。在垂直方向没有分割线,如果app使用了top-level的话,tab可以作为app bar的一部分。http://www.google.com/design/spec/components/tabs.html#tabs-usage
InCode: 可以参考在SDK中的示例 SlidingTabsBasic 或者Google I/O app source(My Schedule 部分)另外加上 前两天分享的 SlidingTabStrip在选中Tabs时,应该有一个前部颜色的变化或者使用强调色彩的颜色条。在tabs滑动的时候,这个线条应该平滑的响应。
抽屉导航
Signature element:
如果你的app使用了导航的Drawer,它也应该遵从最新的material design风格。drawer应该出现在app bar上面,也应该以半透明的方式出现在status bar后面。在app bar最左边的icon是一个抽屉的指示器。http://www.google.com/design/spec/layout/structure.html#structure-app-bar
app icon 在app bar中是不可见的。可选择的,在早期版本中,如果app拥有一个抽屉,那么最左边的app icon会保留并且会变窄,比如在4.0中。Text 和 icon 应该沿着主线
越来越多的App来自google play生态系统将会更新到Material Design,预期2014冬季对于Android的设计来说是一个大的变更期。更多关于Material design设计资源,可以参考YouTube视频:https://www.youtube.com/playlist?list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_
更多的开发者资源,可以参考文档:http://developer.android.com/training/material/index.html
以上全是理论知识,一个Material Design的App,应该遵循哪些标准,如果你已经了解了这些,那么接下来就可以去实现它们了,很多拓荒者为我们提供了很多开源库,大家可以直接用,但有些是向前兼容的,有的是4.0以上的,大家使用的时候注意下。
Material Design开发资源
官方:
设计资源:https://github.com/google/material-design-icons
App:Google 2014: https://github.com/google/iosched (下载地址:http://vdisk.weibo.com/s/av06eFs1kWSeE ,如果需要梯子去请求数据,文件夹下的另一个apk会帮到你)
视频教程:
https://www.youtube.com/watch?v=97SWYiRtF0Y&feature=youtu.be
https://www.youtube.com/watch?v=S3H7nJ4QaD8
示例集合
https://github.com/rahulparsani/google-io-2014-compat
https://github.com/romainguy/google-io-2014
https://github.com/dexafree/MaterialList
https://github.com/gabrielemariotti/cardslib
https://github.com/FaizMalkani/FloatingActionButton(无图)
https://github.com/futuresimple/android-floating-action-button
https://github.com/telly/FloatingAction
https://github.com/makovkastar/FloatingActionButton
Menu & Drawer
https://github.com/markushi/android-ui
https://github.com/balysv/material-menu
https://github.com/saulmm/Android-Material-Example
https://github.com/ikimuhendis/LDrawer
Ripple
https://github.com/markushi/android-ui
https://github.com/traex/RippleEffect
https://github.com/siriscac/RippleView
Transition
https://github.com/saulmm/android_L_preview_example(图太大)
https://github.com/andkulikov/transitions-everywhere
Vector
https://github.com/chiuki/animated-vector-drawable
https://github.com/drakeet/MaterialDialog
https://github.com/r0adkll/PostOffice
https://github.com/lewisjdeane/L-Dialogs
为了能够正常的学习,浏览官方文档,接触最新技术讯息,你需要一个梯子,这里介绍本人用的云梯 ,还不错。