如果试过 Android Lollipop SDK ?您可能已经注意到 Palette 的 API 已更新。和以前一样,Palette 允许您从图像中提取颜色以供 UI 使用。
1. 生成调色板(Palette)
第一步是从 Bitmap 生成 Palette 实例。我们有四种相关的方法来做到这一点:
1 | // Synchronous methods. |
2. 使用调色板(Palette)
调色板生成后,它会尝试选择符合特定条件的六个样本。具体使用哪种类型取绝于你的项目需求,Vibrant 和 Dark Vibrant 是开发人员主要使用的。
样本名称 | 描述 | 样本方法 |
---|---|---|
Vibrant | 充满活力的 | Palette.getVibrantSwatch() |
Vibrant Dark | 充满活力的黑 | Palette.getDarkVibrantSwatch() |
Vibrant Light | 充满活力的亮 | Palette.getLightVibrantSwatch() |
Muted | 柔和的 | Palette.getMutedSwatch() |
Muted Dark | 柔和的黑 | Palette.getDarkMutedSwatch() |
Muted Light | 柔和的黑 | Palette.getLightMutedSwatch() |
2.1 使用样本(Swatch)
每个 Swatch 包含以下方法:
方法名称 | 样本方法 |
---|---|
getPopulation() | 此样本表示的像素数量。 |
getRgb() | 这个颜色的 RGB 值。 |
getHsl() | 这种颜色的 HSL 值。 |
getBodyTextColor() | 文本颜色的 RGB 值,可以显示在此颜色的顶部。 |
getTitleTextColor() | 文本颜色的 RGB 值,可以显示在此颜色的顶部。 |
不同的文本颜色大致匹配同名的材料设计标准样式。标题文本颜色将更加半透明,因为文本较大,所以需要较少的颜色对比度。而正文文字较小,正文颜色将更加不透明,因此需要与颜色形成更多对比。
1 | Palette.Swatch swatch = palette.getVibrantSwatch(); |
注意:如果 Palette 找不到符合条件的颜色,那么它将返回 null。这就是上面有一个空检查的原因。
2.2 自定义颜色选择
但是如果你不喜欢 Palette 的颜色选择怎么办?在这种情况下,您可以抓取组成调色板的所有样本,如下所示:
1 | List<Palette.Swatch> swatches = palette.getSwatches(); |
然后,你可以遍历它们并选择您想要的颜色。
3. Palette size
你可能已经在上面看到,你可以指定调色板大小。数字越大,生成调色板所需的时间越长。数字越低,我们可以选择的颜色越少。要使用的最佳数字取决于图像类型:
- 联系人图像/头像:最佳值为 24-32
- 景观:最佳值为 8-16
Palette size 的默认值为 16,这是一个很好的折衷方案,适用于大多数情况。
4. 添加引用库
如果想使用 Google 原生的 Palette API,需要在项目的 build.gradle
中加入如下引用,版本号根据需要而定:
1 | implementation 'com.android.support:palette-v7:28.0.0' |
如果你想结合 Glide 或 Picasso 来使用,GitHub 上也有对应的类库,分别是 GlidePalette 和 PicassoPalette。