Android5.0是在2014年10月16日发布的。

Android5.0及Material Design_Material Design


1、Android 1.0 一切的开始 2008年10月发布的。第一款安卓手机是htc的G1,它是一款全键盘的手机。没有虚拟键盘的。

2、Android 1.5 增加虚拟键盘。

3、Android 3.0 这个版本是专门针对平板而出的一个版本,一开始并不是开源的。

4、Android 4.0 从4.0开始到现在,4点多 的版本占据着整个android市场的半壁江山。

5、Android 4.4 这个版本第一次将art引入进来

6、Android 5.0 这个版本开始后,全面使用art,并且定义了全新的设计风格 Material Design

Android5.0及Material Design_Android5.0_02


5.0的前身是Android L(Android4.X)开发者预览版 它的api level是20 正式版本是没有20这个api level的

什么是ART?

ART
Android Runtime,它是一个编译虚拟机。
Ahead of Time预先编译
Dalvik
Just In Time实时编译

Dalvik Vs ART

JIT(Just In Time实时编译) Vs AOT (Ahead of Time预先编译)
JIT 运行时编译(运行卡顿)
AOT安装时编译(安装过程较长、首次开机时间长、”硬盘”占用大)
改进的GC
暂停次数从2次变为1次(分析 清理)
暂停时并行处理(多核CPU情况下减少暂停时间)
改进机制,并发GC更及时,减少了因内存申请造成的GC次数
对不同生命周期的内存对象采取不同的策略,减少了GC的时间
Compacting GC减少后台内存的时候和内存碎片(不连续的内存)

优化垃圾回收(garbage collection)。垃圾回收主要有两种:
(1)gcconcurrent。执行时,Dalvik 会在本次 gc 的开始和结束时会短时间暂停代码的执行。
(2)gcforalloc。执行时,会较长时间中断 Java 代码的运行。
在 ART 里,执行 gcconcurrent 时,只会暂停代码一次。执行 gcforalloc 时,也把中断 Java 代码运行的时间大大缩小了。
总体上讲,ART 里垃圾回收占用的开销比 Dalvik 少 50% 以上。减少了垃圾回收时对应用带来的卡顿,使应用运行更流畅。

Android 5.0 主要变化
性能提升
全面由 Dalvik 虚拟机转用 Android RunTime(ART)虚拟机。
64位CPU支持
美观
采用全新Material Design界面

官方文档:​​https://developer.android.com/about/versions/android-5.0-changes.html​​​ 改进的其他小细节如下:
1、改进的通知栏
2、支持64位处理器。
3、支持Bluetooth 4.1。
4、改良的通知界面及新增Priority Mode。
5、强化网络及传输连接性,包括Wi-Fi、蓝牙及NFC。
6、强化多媒体功能,例如支持RAW格式拍摄。
7、改善Android TV的支持。
8、提供低视力的设置,以协助色弱人士。
9、预载省电及充电预测功能。
10、新增自动内容加密功能。
11、支持心跳传感器。
12、新增多人设备分享功能,可在其他设备登录自己账号,并获取用户的联系人、日历等Google云数据。
13、改善Google Now功能。

界面风格
拟物化
注重的是内容的展现形式
代表作:IOS1~6
扁平化
注重的是内容本身
代表作:IOS7、WindowPhone

Material Design概览
Material Design
一种基于纸页质感的设计
是Google提倡的一套设计标准,统一的界面风格
注重的是组件与组建的层级关系
材质化设计
材质:纸张、卡片
层次关系:Z轴

Android5.0及Material Design_Android5.0_03


比较

iOS(1-6):手机是百变盒子。UI突出于屏幕。拟物风格

Android(1.0~4.4):手机是小电脑。UI是什么没想过。实现功能为主

Windows Phone:手机就是手机。UI在屏幕表面。全都是色块

iOS7:手机是观察异世界的魔镜。UI在另一个空间。扁平风格

Android L:手机是装着漂浮小纸片,有玻璃盖子的盒子。屏幕就是玻璃盖。UI在盒子内部

Material Design 由于审核机制,很多的android设计者并没有遵循这种规范。

Material Design设计理念:层级关系 不同层级代表内容的重要程度的不同。

官方文档:​​http://www.google.com/design/spec/material-design/introduction.html​​​ 官方文档的中文翻译:​​http://design.1sters.com/​

Z轴:海拔高度。海拔高度决定了投影的深浅。通过阴影来体现Z轴的

Android5.0及Material Design_Material Design_04


主题与颜色

默认主题:

android:Theme.Material

其他主题:

android:Theme.Material.Light

android:Theme.Material.Light.DarkActionBar

自定义主题

如何自定义主题

在标准的主题下进行修改

android:colorPrimaryDark 状态栏

android:colorPrimary 标题栏

android:navigationBarColor 导航栏

android:textColorPrimary 文字的颜色

android:windowBackground 背景

android:textColor TextView的颜色

android:colorAccent 输入框等

Android5.0及Material Design_Android5.0_05

高度—Z轴

Z = elevation + translationZ
高度决定了阴影的效果
高度决定了View的遮盖关系

建议0-5(6个) 不同的层次,2dp一层
setElevation 的单位是px

阴影
带有透明通道的背景默认不显示阴影
如何让有透明通道的背景显示阴影?
–设置轮廓

轮廓
View. setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
})
outline.setOval 设置椭圆
outline.setRect 设置矩形
outline.setRoundRect 设置圆角矩形
outline.setConvexPath 设置路径
xml文件中指定:android:outlineProvider
裁剪
如何裁剪
代码
view.setClipToOutline(true);
是否能够裁剪 outline.canClip();
矢量图
矢量图也是图,是一种与png、jpg不同的图片
位图VS矢量图
位图:记录像素的信息
矢量图:记录的是算法、公式
SVG
Scalable Vector Graphics 一种定义矢量图的xml语言
Android如何使用矢量图
标签:vector
Android如何使用svg格式的矢量图
转换工具 ​​​http://inloop.github.io/svg2android/​​​ 兼容
​https://github.com/japgolly/svg-android​

涟漪动画 Ripple
水波纹效果
5.0以上系统自带
默认
有界波纹
无界波纹
自定义
xml
代码
RippleDrawable的api:​​​http://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html​

其他动画
揭示动画 Revel
一点点的把图片展示或者隐藏起来
状态动画 State
把属性动画加到selector中
把帧动画加到selector中
路径动画 Curved
按照规定的路径进行动画
矢量图动画
对矢量图进行动画

官方文档:​​http://developer.android.com/training/material/animations.html​

Activity Transition(转场动画)
传统的做法
overridePendingTransition
缺点:只能对Activity整体进行动画效果
新做法
1、开启功能getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
2、创建动画对象Transition transition = new Explode();
3、getWindow().setEnterTransition
getWindow().setExitTransition
4、ActivityOptions.makeSceneTransitionAnimation

官方文档:​​https://developer.android.com/training/material/animations.html​

Transition transition = new Explode()
new Slide()
new Fade()

目标activity在退出的时候,调用finishAfterTransition()方法

Activity 共享元素
两个Activity通过共享元素,达到更加平滑的页面切换效果
关键点:
1、共同的View
2、 android:transitionName的配置
多元素共享
Pair.create

RecyclerView

RecyclerView是增强的ListView,更加先进,更加流畅
Adapter:数据和View之间的桥梁 Adapter创建了View ,又绑定了数据

Android5.0及Material Design_Material Design_06

将原先的getView方法分为两个方法
onCreateViewHolder 创建出ViewHolder并且自动缓存起来
onBindViewHolder 填充数据
RecyclerView标准化了ViewHolder 杜绝了ListView不流畅的现象
LayoutManager的使用
控制RecyclerView中孩子的展示方式
LinearlayoutManager
GridLayoutManager
StaggeredGridLayoutManager
Item的点击事件
通过adapter将点击事件传递出来
回调的写法
更新数据
先改变数据、再notifyItemRemoved
RecyclerView.ItemAnimator 负责添加、删除数据时的动画效果
下拉刷新
借助SwipRefreshLayout的使用android.support.v4.widget.SwipeRefreshLayout
SwipeRefreshLayout.setOnRefreshListener
SwipeRefreshLayout.setRefreshing(false)
个性化
swipeRefreshLayout.setColorSchemeColors
swipeRefreshLayout.setProgressBackgroundColorSchemeColor
上拉加载
监听滚动状态,得知滑动到底部
不同LayoutManager获取最后可见位置的方式不同
CardView
android.support.v7.widget.CardView extends FrameLayout
在布局文件中使用
card_view:cardElevation
卡片高度
card_view:cardMaxElevation
卡片的最大高度
card_view:cardBackgroundColor
卡片的背景色
card_view:cardCornerRadius
卡片的圆角大小
card_view:contentPadding

CardView常用属性:
card_view:cardElevation
卡片高度
card_view:cardMaxElevation
卡片的最大高度
card_view:cardBackgroundColor
卡片的背景色
card_view:cardCornerRadius
卡片的圆角大小
card_view:contentPadding

卡片内容于边距的间隔
card_view:contentPaddingBottom
card_view:contentPaddingTop
card_view:contentPaddingLeft
card_view:contentPaddingRight
card_view:contentPaddingStart
card_view:contentPaddingEnd

card_view:cardUseCompatPadding
设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式
card_view:cardPreventConrerOverlap
在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠

取色器的使用
Palette
Palette.builder
同步
异步

Material Design兼容
定义不同的样式和布局
如res/values-v21/ res/layout-v21/
使用支持库(AppCompat)
被支持的旧控件:EditText、Spinner、CheckBox、RadioButton、SwithCopact、CheckedTextView
新的控件:RecyclerView、CardView
不能向下兼容的效果(判断运行环境替换效果)
Activity 切换
涟漪效果
揭示动画
路径动画
矢量图
矢量图动画