Android模糊Palette

flowchart

1. 简介

在Android开发中,我们经常需要从一张图片中提取出一些主要的颜色,以便进行配色或者根据颜色进行一些特定的操作。Android系统提供了Palette类来帮助我们分析图片的颜色信息。Palette类可以提取出图片中的主要颜色、亮色、暗色等,并提供了一些辅助方法来获取更多的颜色信息。

2. Palette基本用法

Palette类位于androidx.palette.graphics包下,我们需要在项目的build.gradle文件中添加依赖:

dependencies {
    implementation 'androidx.palette:palette:1.0.0'
}

Palette的使用非常简单,首先我们需要获取一张图片的Bitmap对象,然后通过Palette.Builder构建一个Palette对象,最后调用Palette的generate()方法即可。

下面是一个简单的示例代码,我们将一张图片加载到ImageView上,并使用Palette提取出主要颜色:

ImageView imageView = findViewById(R.id.image_view);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
imageView.setImageBitmap(bitmap);

Palette.Builder builder = Palette.from(bitmap);
Palette palette = builder.generate();

int vibrantColor = palette.getVibrantColor(Color.WHITE);
int lightVibrantColor = palette.getLightVibrantColor(Color.WHITE);
int darkVibrantColor = palette.getDarkVibrantColor(Color.WHITE);
int mutedColor = palette.getMutedColor(Color.WHITE);
int lightMutedColor = palette.getLightMutedColor(Color.WHITE);
int darkMutedColor = palette.getDarkMutedColor(Color.WHITE);

上述代码中,我们首先将一张图片加载到ImageView上,然后使用Palette.Builder构建一个Palette对象,并调用generate()方法生成Palette。接下来,我们使用Palette的一些方法获取不同类型的颜色,如果获取不到对应类型的颜色,则会返回传入的默认颜色。

Palette提供了以下几种方法来获取颜色:

方法 说明
getVibrantColor() 获取主要颜色
getLightVibrantColor() 获取较亮的主要颜色
getDarkVibrantColor() 获取较暗的主要颜色
getMutedColor() 获取较柔和的主要颜色
getLightMutedColor() 获取较亮的柔和颜色
getDarkMutedColor() 获取较暗的柔和颜色

3. Palette的高级用法

除了获取主要颜色之外,Palette还提供了一些方法来获取更多的颜色信息。通过这些方法,我们可以获取到图片中的突出颜色、文本颜色等。下面是一些常用的方法:

  • getSwatches():获取图片中的所有颜色列表。
List<Palette.Swatch> swatches = palette.getSwatches();
  • getDominantSwatch():获取图片中的突出颜色。
Palette.Swatch dominantSwatch = palette.getDominantSwatch();
  • getVibrantSwatch():获取图片中的主要颜色。
Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
  • getTitleTextColor():获取文本颜色。
int titleTextColor = palette.getTitleTextColor();

上述代码中,我们可以通过getSwatches()方法获取到Palette中的所有颜色列表。通过getDominantSwatch()方法获取到图片中的突出颜色,getVibrantSwatch()方法获取到主要颜色。而getTitleTextColor()方法则用于获取适合用于标题文本的颜色。

4. Palette的自定义配置

Palette还提供了一些自定义配置的方法,我们可以通过这些方法来指定Palette的分析策略以及最大颜色数。下面是一些常用的自定义配置方法:

  • maximumColorCount():设置最大颜色数。
Palette.Builder builder = Palette.from(bitmap);
builder.maximumColorCount(8);
  • setRegion():设置分析区域。
Palette.Builder builder = Palette.from(bitmap);
builder.setRegion(100, 100, 200, 200);

上述代码中,maximumColorCount()方法用于设置最大颜色数