Palette介绍
Palette是Google在5.0中引入的来获取bitmap颜色值的一个工具类,为了兼容以前的版本,所以放在Support v7 Library中,在使用该类之前,需要在gradle中添加引用。Palette顾名思义调色板, Palette的作用是可以从图像中提取图片的颜色。我们可以把提取的颜色融入到App UI中,可以使UI风格更加美观融洽。
Palette可以提取的颜色如下
- Vibrant
- Vibrant Dark
- Vibrant Light
- Muted
- Muted Dark
- Muted Light
通过Palette对象获取到六个样本swatch
Palette.Swatch s = p.getVibrantSwatch(); //获取到充满活力的这种色调
Palette.Swatch s = p.getDarkVibrantSwatch(); //获取充满活力的黑
Palette.Swatch s = p.getLightVibrantSwatch(); //获取充满活力的亮
Palette.Swatch s = p.getMutedSwatch(); //获取柔和的色调
Palette.Swatch s = p.getDarkMutedSwatch(); //获取柔和的黑
Palette.Swatch s = p.getLightMutedSwatch(); //获取柔和的亮
swatch对象对应的颜色方法
- getPopulation(): 像素的数量
- getRgb(): RGB颜色
- getHsl(): HSL颜色
- getBodyTextColor(): 用于内容文本的颜色
- getTitleTextColor(): 标题文本的颜色
集成Palette
在使用该类之前,需要在gradle中添加引用
dependencies {
compile 'com.android.support:palette-v7:25.3.0'
}
Palette是一个调色板,通过传入一个bitmap对象来获取一个颜色列表,
首先要获取一个Palette实例,
Palette.from(bitmap).generate()
Palette.generate(bitmap)
Palette.generate(bitmap, mMaxColors)
其中maxColor是颜色值的范围,如果是风景画一般范围在10-16之间,如果是人像的话则范围应增加到24,该值默认为16
示例:
Palette p = Palette.from(convertViewToBitmap(view)).generate();
Palette.Swatch swatch = p.getVibrantSwatch();
if (swatch != null) {
tvShow.setBackgroundColor(swatch.getRgb());
}
public Bitmap convertViewToBitmap(View view) {
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return bitmap;
}
这些颜色都有相应的 getter 方法获取。这里要提到一个 Swatch
(样品)类。对 Palette 对象所有颜色相关的操作都可以通过 Swatch 类间接获取。像上面这六种色调,都能通过对应的 Swatch 对象获取到。比如,获取图片主题色,可以直接从 palette 对象中获取:
int color = palette.getDominantColor(ContextCompat.getColor(mContext, R.color.blue));
也可以通过 swatch 对象间接获取:
int color = palette.getDominantSwatch().getRgb();
差别在于,Swatch 对颜色的相关信息做了一个封装处理。通过 Swatch 对象,我们可以获取颜色的 RGB、HSL 等值,和当前颜色在图片中的占比。更重要的一点是,能够获取适合显示在当前颜色背景中的内容色,比如文本标题颜色等。不得不说,Google 想的真周到,并且在源码设计上也是非常独到。