5.0十大新特性

十大新特性

  1. 全新Material Design设计风格
    • 新的视觉语言,在基本元素的处理上,借鉴了传统的印刷设计,字体版式、网格系统、空间、比例、配色、图像使用等这些基础的平面设计规范
  2. 支持多种设备
  3. 全新的通知中心设计
  4. 支持64位ART虚拟机
    • 谷歌承诺所有性能都会比原来提升一倍,Android Lollipop支持更大的寄存器,支持新的指令集,提升了内存寻址空间,未来Android智能手机将支持4GB以上的内存。
  5. Project Volta电池续航改进计划
  6. 全新的“最近应用程序”
  7. 改进安全性
  8. 不同数据独立保存
  9. 改进搜索 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);
	

阴影效果

  • 矩形的阴影效果
    1. 图形大小需要注意
    2. elevation有层次关系的作用android:elevation="6dp"
  • 圆形Shape的阴影效果->可以直接设置
  • 原形图片的阴影效果–>设置无效
    1. 代码中设置阴影
         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