android5.0后新特性修改标题头,Android 5.0新特性

1.Android5.0新特性

系统主题,如何自定义主题高度与阴影阴影与轮廓轮廓与裁剪矢量图drawable染色取色器涟漪动画xml涟漪动画代码涟漪动画状态动画矢量图动画路径动画揭示动画Activity转场动画共享元素转场动画xml配置转场动画CardView如何兼容低版本

1.1.Material Design(MD)简介

Material Design材料设计,是的一种新的设计风格,谷歌希望寄由此来统一各种平台上的应用外观和用户体验。

官网介绍:

1.2.主题样式

l系统自带的三个材料风格主题:

@android:style/Theme.Material (深色)

@android:style/Theme.Material.Light (亮色)

@android:style/Theme.Material.Light.DarkActionBar(亮色,actionbar为深色)

l如何使用材料风格主题?

颜色取色器:

(1)定义主题:

@color/status_red@color/status_red@color/action_red@color/window_bg_red@color/navigation_red@color/fg_red@color/bg_red@color/control_activated_red@color/control_normal_red@color/control_highlight_red@color/control_activated_red@color/button_normal_red@color/white_text@color/white_text@color/white_text  

(2)使用主题:(有两种方式)

a) 配置文件中配置

b) 代码方式:protected voidonCreate(Bundle  savedInstanceState) {      setTheme(R.style.RedTheme);   //设置主题super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);  }

l通过V7(部分)包兼容低版本

(1)添加support v7包

在build.gradle的dependencies节点下添加:compile'com.android.support:appcompat-v7:23.0.3'

(2)使用Theme.AppCompat主题

(3)继承AppCompatActivity

界面不再继承 Activity, FragmentActivity 或ActionBarActivity, 而是继承AppCompatActivity, 目的是为了将MD的风格,

及Toolbar等新的特效兼容到低版本。

注意:V7包只是兼容了材料主题的部分功能,一些主题样式目前在低版本还无法使用

如:导航栏样式修改;

1.3.高度与阴影

n阴影大小Z = elevation + translationZ  (elevation是相对于父控件的高度)

n比父控件的高宽小,才能显示阴影

n高度(阴影大小)决定了View的遮盖关系

阴影效果设置:android:elevation="4dp"

android:translationZ="4dp"

1.4.轮廓(outlineProvider属性)

n指定控件的轮廓//默认为background

android:outlineProvider="none|background|bounds|paddedBounds"

n若控件背景为半透明的shape或图片,则不会产生阴影。需要在代码中设置。//代码设置轮廓circle1.setOutlineProvider(newViewOutlineProvider()  {public voidgetOutline(View view, Outline outline)  {//可以指定圆形,矩形,圆角矩形,pathoutline.setOval(0,0,  view.getWidth(), view.getHeight());      }  });//代码设置轮廓:减少轮廓circle2.setOutlineProvider(newViewOutlineProvider()  {public voidgetOutline(View view, Outline outline)  {intpadding = dp2px(5);          outline.setOval(padding,  padding,                  view.getWidth() -  padding,                  view.getHeight() -  padding);      }  });

1.5.裁剪

n裁剪视图可以轻松改变视图形状;

n裁剪方法:

通过mView.clipToOutline(true)或android:clipToOutline="true"

将视图裁剪成轮廓指定形状

n不是所有轮廓都可裁剪:

仅有矩形、圆形和圆角矩形轮廓支持裁剪,Path、椭圆无法进行裁剪;

可通过Outline.canClip()判断指定的轮廓是否可裁剪:

mTextView.setOutlineProvider(newViewOutlineProvider()  {public voidgetOutline(View view, Outline outline)  {

//指定轮廓:圆形outline.setOval(0,0,  view.getWidth(), view.getHeight());

//指定轮廓:圆角矩形//outline.setRoundRect(0,0,  view.getWidth(), view.getHeight(), dp2px(10));

cut2.setText("判断是否可裁剪:"  + outline.canClip());      }});mTextView.setClipToOutline(true); //裁剪

1.6.染色(Tint)

n十六种PorterDuffXfermode(参考ApiDemo:graphics / xfermodes)

从上面我们可以看到PorterDuff.Mode为枚举类,一共有16个枚举值:

1.PorterDuff.Mode.CLEAR

所绘制不会提交到画布上。2.PorterDuff.Mode.SRC

显示上层绘制图片3.PorterDuff.Mode.DST

显示下层绘制图片4.PorterDuff.Mode.SRC_OVER

正常绘制显示,上下层绘制叠盖。5.PorterDuff.Mode.DST_OVER

上下层都显示。下层居上显示。6.PorterDuff.Mode.SRC_IN

取两层绘制交集。显示上层。7.PorterDuff.Mode.DST_IN

取两层绘制交集。显示下层。8.PorterDuff.Mode.SRC_OUT

取上层绘制非交集部分。9.PorterDuff.Mode.DST_OUT

取下层绘制非交集部分。10.PorterDuff.Mode.SRC_ATOP

取下层非交集部分与上层交集部分11.PorterDuff.Mode.DST_ATOP

取上层非交集部分与下层交集部分12.PorterDuff.Mode.XOR

异或:去除两图层交集部分13.PorterDuff.Mode.DARKEN

取两图层全部区域,交集部分颜色加深14.PorterDuff.Mode.LIGHTEN

取两图层全部,点亮交集部分颜色15.PorterDuff.Mode.MULTIPLY

取两图层交集部分叠加后颜色16.PorterDuff.Mode.SCREEN

取两图层全部区域,交集部分变为透明色

ntint模式

android:background="@drawable/ring"android:backgroundTint="@color/color_tint"//tint颜色android:backgroundTintMode="add"//染色模式

n一张图片实现选择器:

按下的样式:drawable/ring_tint.xml<?xml  version="1.0"encoding="utf-8"?>

选择器的定义:<?xml  version="1.0"encoding="utf-8"?>          

1.7.调色板(Palette)

Palette:调色板,取色板,它是v7包中的类: android.support.v7.graphics.Palette

可以用来获取一张图片中的颜色值。

Vibrant         鲜艳的

Vibrant dark    鲜艳的暗色

Vibrant light    鲜艳的亮色

Muted          柔和的

Muted dark     柔和的暗色

Muted light     柔和的亮色

Bitmapbitmap  = BitmapFactory.decodeResource(getResources(),  R.drawable.palette);

//对图片取色是一个比较消耗性能的操作,其内部会在子线程中运行。Palette.from(bitmap).generate(newPalette.PaletteAsyncListener()  {public voidonGenerated(Palette palette) {v.setBackgroundColor(palette.getVibrantColor(Color.BLACK));vd.setBackgroundColor(palette.getDarkVibrantColor(Color.BLACK));vl.setBackgroundColor(palette.getLightVibrantColor(Color.BLACK));m.setBackgroundColor(palette.getMutedColor(Color.BLACK));md.setBackgroundColor(palette.getDarkMutedColor(Color.BLACK));ml.setBackgroundColor(palette.getLightMutedColor(Color.BLACK));     }  });

1.8.矢量图

lSVG: 矢量图可以用一个根节点为svg的xml文件表示;

要在android中显示矢量图,需要把svg文件转换为vector文件

spacer.gif

//drawable/heart.xml

1.9.全新动画

在MaterialDesign设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性。Material主题为控件和Activity的过渡提供了一些默认的动画,在android L上,允许自定义这些动画:

Touch feedback触摸反馈动画 (水波纹动画,涟漪动画)

Circular Revealanimation  圆形揭示动画

Path-based animations 基于路径的动画(Curvedmotion曲线运动)

View state changes 视图状态动画

Vector Drawables 矢量图动画

Activity transitionsActivity转场动画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值