上午的时候在刷Google+,看到了Abraham Williams转发了一篇强文,是Android Developers网站新发的一篇博客—Implementing Material Design in your Android App。觉得很前卫,对于新发布的Android版本号Android 5.0是一个很好的学习和了解的机会,所以就花了些时间把它翻译了下来,希望对自己、对其它人有所启发。

因为翻译Android开发博客和API也只是业余爱好,水平有限,其中不免有不准确的地方,所以把原文地址也一并贴过来,不清楚的地方,可以查看原文。

http://android-developers.blogspot.com/2014/10/implementing-material-design-in-your.html?m=1,不幸的是,要查看这篇文章,得翻墙。

好,下面是翻译的详情:

对于多屏世界,材料设计(Material Design)是一种实现可视化、交互和动作设计的综合途径。Android 5.0 Lollipop和更新的支持包能够了帮你创建材料UI。下面简要简介一下在应用中能够实现的材料设计、API和控件的一些主要元素。

有形的surface

在材料设计中,UI由数字“纸&墨”碎片构成。surface及其投射的阴影对应用的结构,即所能触摸到的界面和感知到的移动,提供了可见的提示。材料设计可以通过移动、扩展和重组来创建灵活的UI。

阴影

Surface的位置和深度导致光线和阴影上面的轻微改变。新的elevation属性使你能够精确的设置视图在Z轴上的位置,由此,framework在该视图后面的子项上面投射出实时动态的阴影。你可以以dip为单位在布局中声明设置elevation:

 <ImageView …

     android:elevation="8dp" />

还可以通过代码getElevation()/setElevation()来设置(ViewCompat中也有相仿的实现)。视图投射的阴影由其轮廓决定,而轮廓默认情况下源自于视图的背景。例如,把FAB(floating action button)的背景设置为圆形drawable,然后,FAB就会投射恰当的阴影。如果想更精细的控制视图的阴影,可以设置ViewOutlineProvider,它能够自定义getOutline()里面的Outline。

卡片

卡片是一种通用模式,用来创建持有清晰信息碎片的surface。新的CardView支持包通过提供轮廓和阴影,允许你更随意的创建CardView(在之前平台上有相同的效果)。

 <android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Your card content --> </android.support.v7.widget.CardView>

CardView扩展自FrameLayout,并且提供了默认的elevation和圆角半径,以使卡片在不同的平台上面拥有一致的外观。如果需要的话,可以通过cardElevation和cardCornerRadius属性来设置。记住,卡片并不是实现维度的惟一方式,你应该提防UI过度卡片化!

类打印设计

材料利用源于打印设计的经典规则来创建干净、简单的布局,以放置内容在其前面或者中心。粗体权衡了颜色选择、有意而为的空格、雅致的排版和浓烈的底线方格,创建了有层次的、意义明了的和重点突出的效果。

排版

Android 5.0更新了系统字体Roboto以忽略字体大小限制的方式来美观且清晰地展示文本。新的中等权重添加了进来(android:fontFamily=”sans-serif-medium”),新的文本外观风格实现了广为推荐的typographic scale,用来平衡内容的密度和阅读的舒适感。例如,可以通过设置”android:textAppearance=’@android:style/TextAppearance.Material.Title’”来使用Title风格。这些风格可能通过AppCompat支持包来在较老版本上使用,如”@style/TextAppearance.AppCompat.Title”.

色彩

应用的调色板给应用带来了印迹和人格,以致我们可以通过以下主题属性来实现UI控制的彩色化。

  • colorPrimary:应用的首要印迹颜色;常用作actionbar的背景颜色、最近任务的标题以及边缘效果中。
  • colorAccent:colorPrimary的生动补充。用于诸如EditTex和Switch等框架的控制。
  • colorPrimaryDartk:colorPrimary的更暗色补充。用于状态条。

更多的属性给予彩色化控制更细粒度的控制,例如:colorControlNormal, colorControlActivated, colorControlHighlight, colorButtonNormal, colorSwitchThumbNormal, colorEdgeEffect, statusBarColor和navigationBarColor.

AppCompat提供了以上功能的更大子集,允许你在Lollipop之前版本上实现彩色化控制。

动态色彩

http://4.bp.blogspot.com/-qX9XNcFEQlQ/VEngSGP2ZyI/AAAAAAAAA6E/PbORZ-3ex-Y/s1600/palette2.gif

材料设计鼓励色彩的动态使用,尤其是你有许多图片要处理的时候。新的Palette支持包允许你获取从图片到要匹配的UI控制风格的色彩集,以创建拟真的体验。萃取的颜色版将包含强烈的和轻柔的色调,就像为了实现最佳可读性的前景文本颜色(forground text color)一样。例如:

 Palette.generateAsync(bitmap,
new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant =
palette.getVibrantSwatch();
if (swatch != null) {
// If we have a vibrant color
// update the title TextView
titleView.setBackgroundColor(
vibrant.getRgb());
titleView.setTextColor(
vibrant.getTitleTextColor());
}
}
});

可信动作

有形surface显示的就像电影中的跳格剪接。他们移动到能够帮助集中注意力的地方,建立空间联系并维持连续性。材料对触摸作出响应,以确认交互以及所触点发出的波形外向改变。所有的动作都有意义且让人倍感亲切,以协助用户的理解。

Activity+Fragment转变特效

通过声明贯穿两个屏幕的通用”共享元素”,可以创建两种状态间顺滑的转换特效。

http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s1600/activity_transitions%2B(1).gif

album_grid.xml:

 <ImageView

android:transitionName="@string/transition_album_cover" />

album_details.xml

 <ImageView

android:transitionName="@string/transition_album_cover" />

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的时候,这个转换特效自动地赋予生命。除了共享元素之外,现在也可以精心设计进入和退出元素(转换特效)。

波纹

http://3.bp.blogspot.com/-6UtZxpuhI-Q/VEqCMq6q17I/AAAAAAAAA68/oVt3vMIwJs0/s1600/animation-responsiveinteraction-inkreactions-notouchripplepressandrelease_large_xhdpi.gif

材料设计通过墨纹surface回应对用户的触摸事件作出响应。拿Button为例,当你使用或继承Theme.Material(android:selectableItemBackground)时,交互控制默认展示这种行为。通过简单地在ripple元素中包裹drawable元素,你可以将这种反馈添加到自己定义的drawable中:

 <ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/accent_dark">
<item>
<shape
android:shape="oval">
<solid android:color="?android:colorAccent" />
</shape>
</item>
</ripple>

自定义视图应该扩大触摸定位直到回调View#drawableHotspotChanged里面的drawable,由此,波纹可以从触摸点开始。

StateListAnimator

材料设计也可以通过”升起”以接触手指来回应触摸事件,就像磁铁的吸引力一样。也可以通过使translationZ属性产生动画效果来达到这种效果,其中的translationZ属性相似于elevation属性但却是打算为transient所用;其它是Z=elevation + translationZ。新的StateListAnimator属性允许很轻易就能实现触摸上面的translationZ产生动画(Button默认实现了这种效果):

layout/yout_layout.xml:

 <ImageButton …
android:stateListAnimator="@anim/raise" />

anim/raise.xml:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="true">
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="@dimen/touch_raise"
android:valueType="floatType" />
</item>
<item>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="0dp"
android:valueType="floatType" />
</item>
</selector>

Reveal

用于展示新内容的典型的材料转换特效通过扩展的圆形遮罩来实现这种效果。通过外扩的雷达效果,Reveal协助加强了把用户的触摸点作为所有转换特效的起始。可能通过下面的Animator来实现这种效果:

 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();

Interpolators

动作应该是审慎的、迅捷的、精确的。不像典型的”易入易出”的转换特效,在材料设计中,对象常常快速开始,然后缓慢地到达他们的最终位置。在动画的过程中,对象花费更多的时间在靠近最终位置的地方。最终,用户不必等待动画结束,由此,动作的负面效果被最小化。新的”快进慢出”interpolator已被添加进来以实现这种动作。

http://3.bp.blogspot.com/-h1tGDao-XK4/VEqCGLnpyQI/AAAAAAAAA60/LE4NO1X_gzk/s1600/animation-authentic-motion-authenticMotion_massAndWeight_ex1_large_xhdpi.gif

对于元素的进入屏幕,请分别查看”线出慢入”和”快出线入”interpolator。

可适设计

材料设计的最终核心概念是创建适应性的设计,这种设计对于所以尺寸形状,从手表到巨型电视,都能够完好地适应。适应性设计技术帮我们实现了这种愿景:在相同的基础系统下,每一个设备展示了不同的视图。每一个视图对于每一种尺寸都是量身定制,每一种交互对于每一个设备都恰到好处。色彩、图像、视图层次结构和空间联系保持恒定。材料设计系统提供了灵活的构件和模式来帮你构建可伸缩的设计。

工具条(Toolbar)

Toolbar是action bar模式的泛化,提供了相似的功能,但却更加灵活。不像标准的action bar,toolbar在视图层次结构中只是一个视图,和其它的没有任何区别,所以你可以把它放到任何你喜欢的地方,和其它的视图交叉布局,生成动画,回应滑动事件等待。通过调用Activity.setActionBar(),你可以使Toolbar像Activity中的action bar一样活动。

http://1.bp.blogspot.com/-np39I5VrQTQ/VEnnefqkroI/AAAAAAAAA6c/--kVt_Wi1vk/s1600/contacts_toolbars.png

在这个例子当中,蓝色的toolbar高度被扩展,贴在了屏幕内容上面,并提供了一个导航按钮。注意:额外的两个toolbar分别用在列表和细节视图中。

继续前行并材料设计化

材料设计助你构建易于理解的、美观的且可适的应用,其中充满了动作。我希望这篇博客能够激励你把这些规则应用到你的app中,并指示了一些新的(兼容性)API来达到这个目的。

Android 5.0之应用中实现材料设计—Material Design的更多相关文章

  1. Android 3.0 r1 API中文文档(108) —— ExpandableListAdapter

    前言 本章内容是android.widget.ExpandableListAdapter,版本为Android 3.0  r1,翻译来自"深夜未眠",欢迎访问它的博客:" ...

  2. 在Android Studio 0.5.2中使用ArcGIS Android SDK

    环境 操作系统:Mac OSX 10.8.5Android Studio: 0.5.2ArcGIS Android SDK: 10.2.3 操作步骤 在Android Studio中新建一个Modul ...

  3. 2014年的Google I/O app设计中的材料设计-渣渣的翻译

    又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...

  4. 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题

    在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 Me ...

  5. Xposed 集成 Android 6.0.1环境中,总结

    由于工作需要,需要将xposed集成到android源码中,生成新的ROM就自带xposed的功能. 下面大体上说一下步骤和遇到的问题. 1.下载,并编译android源码,成功. 2.下载 http ...

  6. android 5.0新特性学习--RecyclerView

    在过去很多年,我们的PC或者手机设备都是采用拟物化的设计风格,IOS采用扁平化的特性,android在2014年IO大会上说采用Material Design的设计风格,显示效果不能过于生硬的转换,而 ...

  7. Android 5.0 技术新趋势

    由于 Android 的版本分裂比较严重,整个新系统升级可能需要一两年甚至更长时间.所以目前使用 Android 5.0 的大部分是喜欢尝鲜的用户,同时现在市场上能够很好支持 Android 5.0 ...

  8. android 5.0新特性

    Android Lollipop 面向开发人员的主要功能 Material Design 设计 注重性能 通知 以大屏幕呈现 以文档为中心 连接性能再上一级 高性能图形 音频处理功能更强 摄像头和视频 ...

  9. Android 9.0适配遇到的问题1

    文章同步自javaexception 本周在适配Android 9.0,过程中碰到了小问题 问题1: SSL handshake timed out 解决办法: Android 9.0 开始,默认不允 ...

随机推荐

  1. Linux IPC(Inter-Process Communication,进程间通信)之管道学习

    1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...

  2. android activity 后的形式 藏

    activity 希望的形式 于AndroidManifest.xml  建立 theme 属性 <activity             android:name="zicox.u ...

  3. NYoj 最舒适的路线

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=711 分析:枚举速度最大的边,找出能够从S到达T的最大速度,然后求出它们的比值,与已 ...

  4. linux_coom _ Linux文件比较,文本文件的交集、差集与求差

    交集和差集操作在集合论相关的数学课上经常用到,不过,在Linux下 对文本进行类似的操作在某些情况下也很有用. comm命令 comm命令可以用于两个文件之间的 比较,它有一些选项可以用来调整输出,以 ...

  5. Android中适用于ListView、GridView等组件的通用Adapter

    今天随便逛逛CSDN,看到主页上推荐了一篇文章Android 高速开发系列 打造万能的ListView GridView 适配器,刚好这两天写项目自己也封装了相似的CommonAdapter,曾经也在 ...

  6. javascript中字符串常用方法总结

    字符串是javascript编程中不可或缺的元素,掌握字符串常用的方法也是我们学习过程中的必经之路,下面我们总结一些最常用的的字符串方法. string.charAt(postion) charAt方 ...

  7. 【百度地图API】情人节求爱大作战——添加标注功能

    原文:[百度地图API]情人节求爱大作战--添加标注功能 任务描述: 2月2日是除夕,2月14立马来!即将到来的情人节,你想送TA一份什么礼物呢? 不如,在你们居住的地方,画个大大的桃心,表达你对TA ...

  8. c#数据库操作大全

    原文:c#数据库操作大全 1.提取单条记录 //using System.Data; //using System.Data.SqlClient;  using (SqlConnection cn = ...

  9. sql server 视图 的一个例子

    这是一个 有点复杂的查询.我现在 想把他封装 成 视图  其中  B.RecordID= 41 提供给 视图外查询. create view view_UserRecord as select Rec ...

  10. .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧

    原文:.Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧. 话说有了WebB ...