5.0十大新特性
十大新特性
- 全新Material Design设计风格
- 新的视觉语言,在基本元素的处理上,借鉴了传统的印刷设计,字体版式、网格系统、空间、比例、配色、图像使用等这些基础的平面设计规范
- 支持多种设备
- 全新的通知中心设计
- 支持64位ART虚拟机
- 谷歌承诺所有性能都会比原来提升一倍,Android Lollipop支持更大的寄存器,支持新的指令集,提升了内存寻址空间,未来Android智能手机将支持4GB以上的内存。
- Project Volta电池续航改进计划
- 全新的“最近应用程序”
- 改进安全性
- 不同数据独立保存
- 改进搜索 10.新的API支持,蓝牙4.1、USB Audio、多人分享等其它特性
Material Design
- 设计语言,设计标准,设计规范
- 官网:http://www.google.com/design/spec/material-design/introduction.html
- 中文翻译1:http://www.mobileui.cn/material-design/
- 中文翻译2:http://design.1sters.com/#
开发方面新增了哪些内容
关心有哪些新的api
5.0主题
- 谷歌官方我们提供了三种配色风格
黑色主题 Theme.Material
明亮主题 Theme.Material.Light
明亮主题黑色ActionBar Theme.Material.Light.DarkActionBar
- 主题修改:重写属性
<style name="CustomTheme1" parent="android:Theme.Material.Light.DarkActionBar">
<!--通知栏颜色-->
<item name="android:colorPrimaryDark">#ff3367d6</item>
<!--标题栏颜色-->
<item name="android:colorPrimary">#ff4285f4</item>
<!--窗口颜色,必须用xml定义颜色-->
<item name="android:windowBackground">@color/windowBackground_CustomTheme1_color</item>
<!--底部操作栏颜色-->
<item name="android:navigationBarColor">#ff000000</item>
</style>
- 主题切换
private void changeTheme(int redTheme) {
overridePendingTransition(0, 0);
finish();
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.putExtra("themeId", redTheme);
overridePendingTransition(0, 0);
startActivity(intent);
}
ToolBar&DrawerLayout&DrawerToggle的使用
Toolbar是什么?大概说一下它的官方介绍。Toolbar是应用的内容的标准工具栏,
可以说是Actionbar的升级版
,两者不是独立关系,要使用Toolbar还是得跟ActionBar扯上关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置
,因为它是作为一个ViewGroup来定义使用的
,所以单纯使用ActionBar已经稍显过时了,它的一些方法已被标注过时。
- 引入v7包,去除actionBar
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
- 创建ToolBar的布局:预览需要
Theme.AppCompat
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff0000">
</android.support.v7.widget.Toolbar>
- 使用toolbar
//布局中使用
//<include layout="@layout/include_toolbar"></include>
//写代码
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);//这个方法是在ActionBarActivity里面,对应的Activity需要继承actionBarActivity
- 集成Drawlayout
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawLayout);
mDrawerToggle = new ActionBarDrawerToggle(MainActivity.this,
mDrawerLayout, mToolbar, R.string.open, R.string.close);
- 集成actionbarToggle
mDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mDrawerToggle);
阴影效果
- 矩形的阴影效果
- 图形大小需要注意
- elevation有层次关系的作用
android:elevation="6dp"
- 圆形Shape的阴影效果->可以直接设置
- 原形图片的阴影效果–>设置无效
- 代码中设置阴影
ViewOutlineProvider provider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, view.getWidth(), view.getHeight());
}
};
iv.setOutlineProvider(provider);
图片的叠加裁剪(圆角图片)
ViewOutlineProvider provider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, view.getWidth() - 30, view.getHeight() - 30);
}
};
iv.setOutlineProvider(provider);
iv.setClipToOutline(true);
图片选择器–>统一张图片使用tint,tintmodel
的属性
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@mipmap/g24"
android:tint="#ff9cff94"
android:tintMode="multiply">
</bitmap>
调色板
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.h17);
// 如果操作本来就属于后台线程,可以使用:
// Palette p = Palette.generate(bitmap);
// 如果在主线程中,我们可以使用异步的方式:
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
mIv_muted.setBackgroundColor(palette.getMutedColor(Color.BLACK));
mIv_muted_light.setBackgroundColor(palette.getLightMutedColor(Color.BLACK));
mIv_vibrant.setBackgroundColor(palette.getVibrantColor(Color.BLACK));
}
});
水波纹效果
android:background="?android:selectableItemBackground"
android:background="?android:selectableItemBackgroundBorderless"
android:background="#ff5cffbf"
mCustomAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*
view 操作的视图
centerX 动画开始的中心点X
centerY 动画开始的中心点Y
startRadius 动画开始半径
startRadius 动画结束半径
*/
int centerX = mCustomAnimation.getWidth() / 2;
int centerY = mCustomAnimation.getHeight() / 2;
float startRadius = 0;
float endRadius = mCustomAnimation.getWidth();
Animator animator = ViewAnimationUtils.createCircularReveal(mCustomAnimation,
centerX,
centerY, startRadius, endRadius);
animator.setDuration(3000);
animator.start();
}
});
状态动画,background可以设置属性动画,帧动画,矢量图动画,转场动画
vector矢量图
- 矢量图和位图的区别
- 矢量图展示
- 桃心
- 三角形
- 矢量图动画
步骤
-
元素的矢量资源,在res/drawable/(文件夹)`vector_triangle.xml`
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="64dp"
android:height="64dp"
android:viewportHeight="600"
android:viewportWidth="600"
>
<path
android:name="v"
android:fillColor="#000000"
android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z"/>
</vector>
-
元素的矢量资源动画,在res/drawable/(文件夹)`animated_vector_triangle.xml`
<?xml version="1.0" encoding="utf-8"?>
<animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_triangle"
>
<target
android:name="v"
android:animation="@anim/path_morph"/>
<!--<target-->
<!--android:name="v" 指定名字.这个是后面需要-->
<!--android:animation="@anim/path_morph" 指定一个动画/>-->
</animated-vector>
- < objectAnimator>元素的一个或多个对象动画器,在res/anim/(文件夹)
path_morph.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:propertyName="pathData"
android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z"
android:valueTo="M300,70 l 0,-70 70,0 0,140 -70,0 z"
android:valueType="pathType">
</objectAnimator>
- 启动动画
View triangle = findViewById(R.id.triangle);
Drawable drawable = triangle.getBackground();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
}
recycleView
- view adapter layoutmanager
- 纵向
- 网格
- 瀑布流
- 横向
- 下拉刷新
关键方法
private void initListAdapterV() {
//设置layoutManager
LinearLayoutManager layoutManger = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setLayoutManager(layoutManger);
//设置adapter
ListAdapter adapter = new ListAdapter(MainActivity.this, mDatas);
mRecyclerView.setAdapter(adapter);
}
private void initListAdapterH() {
//设置layoutManager
LinearLayoutManager layoutManger = new LinearLayoutManager(MainActivity.this,
LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(layoutManger);
//设置adapter
ListAdapter adapter = new ListAdapter(MainActivity.this, mDatas);
mRecyclerView.setAdapter(adapter);
}
private void initGridAdapterV() {
//设置layoutManager
LinearLayoutManager layoutManger = new GridLayoutManager(MainActivity.this, 2);
mRecyclerView.setLayoutManager(layoutManger);
//设置adapter
ListAdapter adapter = new ListAdapter(MainActivity.this, mDatas);
mRecyclerView.setAdapter(adapter);
}
private void initGridAdapterH() {
//设置layoutManager
LinearLayoutManager layoutManger = new GridLayoutManager(MainActivity.this, 2,
LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(layoutManger);
//设置adapter
ListAdapter adapter = new ListAdapter(MainActivity.this, mDatas);
mRecyclerView.setAdapter(adapter);
}
private void initStaggeredGridAdapterV() {
//设置layoutManager
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
//设置adapter
StraggerAdapter adapter = new StraggerAdapter(MainActivity.this, mStraggerDatas);
mRecyclerView.setAdapter(adapter);
}
private void initStaggeredGridAdapterH() {
//设置layoutManager
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
StaggeredGridLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
//设置adapter
StraggerAdapter adapter = new StraggerAdapter(MainActivity.this, mStraggerDatas);
mRecyclerView.setAdapter(adapter);
}
###cardview hellword