一、Android Palette原理:
需求来自于设计想搞一个吸色的背景,就想到了Palette。1、RGB和HSL
一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度。HSL 和 HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单。HSL 表示 hue(色相)、saturation(饱和度)、lightness(亮度),HSV 表示 hue、saturation、value(色调) 而 HSB 表示 hue、saturation、brightness(明度)。HSL 和 HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。
对概念的了解具体可以移步:https://blog.csdn.net/jiangxinyu/article/details/8000999
2、PS:
Android中是自带ColorUtils类的,这个类可以提供方法让HSL格式的色值和RGB色值进行相互转化的。其内部有具体的计算公式。二、工程引入:
1、gradle
compile 'com.android.support:palette-v7:25.1.1'
2、PS:
这里有个问题要请教下大家,在使用的时候发现gradle在下载jar包后,如果缓存下已经找得到25版本的,此时再改为23版本的jar包,好像并不会重新下载,不太明白是gradle导致的,还是本地设置导致的。
三、使用:
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();
Palette.Swatch light = palette.getLightVibrantSwatch();
Palette.Swatch dark = palette.getDarkVibrantSwatch();
Palette.Swatch darkMute = palette.getDarkMutedSwatch();
Palette.Swatch domin = palette.getDominantSwatch();
setStatusBar(domin.toString(),
domin.getRgb());
}
});
在使用的时候有几个点需要注意下
1、Palette的使用必须有源bitmap
2、旧版的Palette提供同步解析图片,但是在25版本时已经变为异步解析图片了。需要new一个Listener
3、在提供的获取样本的方法中,主要分为3类,dominate、vibrant、mute三种。其中vibrant和mute又包含light-dark样本。所以总共的方法为7种。这里需要注意的是,除了dominate样本,其余6种都是可以为空的。
4、获取dominate样本的方法在23中没有,25中有。
5、性能:jar包大小23kb,图片解析速度在魅族Pro6上不到30ms。
<