前言
Palette 是 Android L SDK 中的新特性,可以使用 Palette 从图像中提取出突出的颜色(主色调),获取到颜色之后我们再将这个颜色值赋给 ActionBar、状态栏等。从而达到界面色调的统一,使界面美观协调。
Palette 原理:通过得到一个 bitmap,通过方法进行分析,取出
LightVibrantSwatch,DarkVibrantSwatch,LightMutedSwatch,DarkMutedSwatch
这些样本,然后得到 rgb 值。
一、Palette 相关方法
方法 | 介绍 |
---|---|
Palette.Builder | 生成器类,生成 Palette 实例 |
Palette.Filter | 过滤器接口,使 Palette 有更加细腻的颜色过滤 |
Palette.PaletteAsyncListener | 异步加载监听 |
pattle.Swatch | 提供获取结果的色彩样本 |
from(List<Palette.Switch> switches) | 通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette |
from(Bitmap bitmap) | 通过返回 Palette.Builder 实例来构建 Palette |
palette.getDarkMutedColor(Color.BLUE) | 获取到柔和的深色的颜色(可传默认值) |
palette.getDarkVibrantColor(Color.BLUE) | 获取到活跃的深色的颜色(可传默认值) |
palette.getLightMutedColor(Color.BLUE) | 获取到柔和的明亮的颜色(可传默认值) |
palette.getLightVibrantColor(Color.BLUE) | 获取到活跃的明亮的颜色(可传默认值) |
palette.getVibrantColor(Color.BLUE) | 获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值) |
palette.getMutedColor(Color.BLUE) | 获取图片中一个最柔和的颜色(可传默认值) |
-
Palette.Builder
生成器类,生成 Palette 实例 -
Palette.Filter
过滤器接口,使 Palette 有更加细腻的颜色过滤 -
Palette.PaletteAsyncListener
异步加载监听 -
pattle.Swatch
提供获取结果的色彩样本 -
from(List<Palette.Switch> switches)
通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette -
from(Bitmap bitmap)
通过返回 Palette.Builder 实例来构建 Palette -
palette.getDarkMutedColor(Color.BLUE)
获取到柔和的深色的颜色(可传默认值) -
palette.getDarkVibrantColor(Color.BLUE)
获取到活跃的深色的颜色(可传默认值) -
palette.getLightMutedColor(Color.BLUE)
获取到柔和的明亮的颜色(可传默认值) -
palette.getLightVibrantColor(Color.BLUE)
获取到活跃的明亮的颜色(可传默认值) -
palette.getVibrantColor(Color.BLUE)
获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值) -
palette.getMutedColor(Color.BLUE)
获取图片中一个最柔和的颜色(可传默认值)
二、基本使用
1、导入依赖
implementation 'androidx.palette:palette:1.0.0'
2、Palette 创建
Palette 创建有同步和异步两种方式,开发中我们为了提高应用性能,比较耗时的操作都会采用异步方式。
Bitmap bm =BitmapFactory.decodeResource(getResources(),R.drawable.kale);
// 同步
Palette.Builder builder = Palette.from(bm);
Palette palette=builder.generate();
// 异步
builder.generate(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
}
}
3、Palette 获取颜色属性
Palette 可以分析提取出以下突出的颜色,在应用适用的环境下灵活使用,如下图所示,获取到屏幕中图片 BitMap 对象,然后通过 Palette 提取到相关属性,在 TextView 设置背景颜色。
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(@Nullable Palette palette) {
//获取到柔和的深色的颜色(可传默认值)
int darkMutedColor = palette.getDarkMutedColor(Color.BLUE);//如果分析不出来,则返回默认颜色
//获取到柔和的明亮的颜色(可传默认值)
int lightMutedColor = palette.getLightMutedColor(Color.BLUE);
//获取到活跃的深色的颜色(可传默认值)
int darkVibrantColor = palette.getDarkVibrantColor(Color.BLUE);
//获取到活跃的明亮的颜色(可传默认值)
int lightVibrantColor = palette.getLightVibrantColor(Color.BLUE);
//获取图片中一个最柔和的颜色(可传默认值)