Material设计之Palette

是5.0的一个新功能,叫做调色板,其可以从一张中提出去颜色值,设置在别的控件上面,这样有利于保持整体风格的一致性,例如下面这张效果图:

Material设计之Palette

文章插图
根据选择的图片不一样,的颜色也不同,是不是很协调呢~~ 。ok,下面来详细的介绍其使用方式:
一、准备阶段
首先要更新最新的包,更新之后到这个目录(sdk根目录////v7//libs):
Material设计之Palette

文章插图

Material设计之Palette

文章插图
找到里面的jar包,导入到自己的工程中,就搞定了,如果你嫌麻烦,我这里提供jar包:jar包
二、使用阶段
先来看下效果:
Material设计之Palette

文章插图
的使用其实很简单,以前使用的方式为.(),更新到最新的sdk方式已经弃用掉了,现在的使用方式一般为:.from( bm).()方式 。来看一段样例代码:
【Material设计之Palette】 AsyncTask asyn = Palette// 使用Builder得到palette.from(BitmapFactory.decodeResource(getResources(), R.drawable.background))// 开始获取,获取结果在回调方法里返回.generate(new PaletteAsyncListener() {@Overridepublic void onGenerated(Palette palette) {Log.e("", "PaletteAsyncListener");List list = palette.getSwatches();for (Swatch swatch : list) {// 获取对应的字体颜色txtv.setTextColor(swatch.getBodyTextColor());// 获取RGB颜色showColor.setBackgroundColor(swatch.getRgb());// 休眠1秒,这样就可以看清所有的颜色值try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}});
可以发现该方法返回的是一个异步任务,是不是觉得很奇怪呢????其实返回这个是有道理的,因为解析一张图片去获取突出的颜色是一个很耗时的操作,而对于一个耗时的操作来说会影响用户的体验,所以就使用异步任务来完成颜色的解析,当然我们也可以取消这个任务,是不是很神奇呢??该方法的监听接口里面传出一个对象,使用这个对象获取到,这个类就是一个颜色的样本,我们需要的颜色值都存在这个类里,下面是能从这个类获取到的颜色值:
Material设计之Palette

文章插图
别的都认识,其中有一个()可能大家不熟悉,请看词条:HSL色彩模式是工业界的一种颜色标准,是通过对色相(H)、饱和度(S)、明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,HSL即是代表色相,饱和度,明度三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一 。
当然我们也可以直接使用获取颜色,看下面:
Material设计之Palette

文章插图