Android Palette吸色原理及源码解析

一、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。
<

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值