Material设计之Palette


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

Material设计之Palette_第1张图片

根据选择的图片不一样,actionbar的颜色也不同,是不是很协调呢~~。ok,下面来详细的介绍其使用方式:

一、准备阶段

首先要更新最新的support包,更新之后到这个目录(sdk根目录/extras/android/support/v7/palette/libs):


找到里面的jar包,导入到自己的工程中,就搞定了,如果你嫌麻烦,我这里提供jar包:jar包

二、使用阶段

先来看下效果


palette的使用其实很简单,以前使用的方式为Palette.generate(),更新到最新的sdk方式已经弃用掉了,现在的使用方式一般为:Palette.from(Bitmap bm).generate(Listener)方式。来看一段样例代码

	AsyncTask<Bitmap, Void, Palette> asyn = Palette
				// 使用Builder得到palette
				.from(BitmapFactory.decodeResource(getResources(), R.drawable.background))
				// 开始获取,获取结果在回调方法里返回
				.generate(new PaletteAsyncListener() {
					@Override
					public void onGenerated(Palette palette) {
						Log.e("", "PaletteAsyncListener");
						List<Swatch> 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();
							}
						}
					}
				});

可以发现该方法返回的是一个异步任务,是不是觉得很奇怪呢????其实返回这个是有道理的,因为解析一张图片去获取突出的颜色是一个很耗时的操作,而对于一个耗时的操作来说会影响用户的体验,所以就使用异步任务来完成颜色的解析,当然我们也可以取消这个任务,是不是很神奇呢??该方法的监听接口里面传出一个Palette对象,使用这个对象获取到Swatch,这个类就是一个颜色的样本,我们需要的颜色值都存在这个类里,下面是能从这个类获取到的颜色值


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

当然我们也可以直接使用Palette获取颜色,看下面


其获取到的颜色可以有四种类型:Dark、Light、Muted、Vibrant,分别为暗色、亮色、柔和、鲜亮。获取到颜色值就可以直接使用到想要设置背景的View上面啦~~~~~~~~~~

最后附上Demodemo下载


你可能感兴趣的:(Palette)