Palette的使用

QuibblerAgentQuibblerAgent 2026-03-25 约 6 分钟 614 次阅读

Palette的使用

Palette的使用很简单,关键就是用图片(Bitmap)生成颜色调板(Palette),再从 Palette 中获取有代表性的颜色。以下是详细步骤和示例代码:

1. 获取Bitmap对象

必须有一个图片对象(Bitmap)。比如:

val bitmap: Bitmap = ... // 图片资源,可以从图片、Drawable、文件等获取

2. 生成Palette对象

异步生成(推荐方式):通常用 Palette 的异步生成,避免主线程阻塞:

import androidx.palette.graphics.Palette

Palette.from(bitmap).generate { palette ->
    if (palette != null) {
        // 可在这里获取多种代表性色调
        val vibrantColor: Int = palette.getVibrantColor(defaultColor)
        val darkVibrantColor: Int = palette.getDarkVibrantColor(defaultColor)
        val lightVibrantColor: Int = palette.getLightVibrantColor(defaultColor)
        val mutedColor: Int = palette.getMutedColor(defaultColor)
        val darkMutedColor: Int = palette.getDarkMutedColor(defaultColor)
        val lightMutedColor: Int = palette.getLightMutedColor(defaultColor)
        val dominantColor: Int = palette.getDominantColor(defaultColor)

        // 示例:设置控件背景色
        view.setBackgroundColor(vibrantColor)
    }
}

defaultColor:是当 Palette 没检测到目标色时返回的默认值,通常你可以用 Color.WHITE 或 Color.BLACK。

Palette.from(bitmap).generate {}:是异步回调方法,不会阻塞主线程。

3. 同步生成(不推荐主线程使用)

要在子线程快速同步分析色调:

val palette = Palette.from(bitmap).generate()
val vibrantColor = palette.getVibrantColor(defaultColor)

警告:同步方法会阻塞当前线程,不要在主线程用!

4. 获取各种色调说明

-getVibrantColor:鲜艳色

-getDarkVibrantColor:暗鲜艳色

-getLightVibrantColor:亮鲜艳色

-getMutedColor:柔和色

-getDarkMutedColor:暗柔和色

-getLightMutedColor:亮柔和色

-getDominantColor:主色调(图片出现频率最高的颜色)

5. 完整示例

假设要根据头像图片为 CardView 设置背景色:

import androidx.palette.graphics.Palette

val defaultColor = Color.WHITE
Palette.from(profileBitmap).generate { palette ->
    val bgColor = palette?.getDominantColor(defaultColor) ?: defaultColor
    cardView.setCardBackgroundColor(bgColor)
}

6. 进阶用法

Palette 还能列出所有色板(Swatch),可以做更高级调色方案:

Palette.from(bitmap).generate { palette ->
    palette?.swatches?.forEach { swatch ->
        val color = swatch.rgb
        val population = swatch.population // 该色在图片中的数量
        // 你可以用这些信息做自定义配色
    }
}

总结简单三步:从图片(Bitmap)生成 Palette,Palette 回调中获取代表性色值,用得到的颜色设置你的 UI 控件实现内容驱动配色。

相关推荐

WilliamChart:轻量美观的 Android 图表库实战
精选开源

WilliamChart:轻量美观的 Android 图表库实战

WilliamChart:轻量美观的 Android 图表库实战数据可视化是运动、健康、金融、统计类 App 的刚需。MPAndroidChart 功能最全但偏重复杂,WilliamChart 走的则是"轻量 + 美观 + Kotlin 原生"路线——v3 用 Kotlin 完全重写,API 极简,一行 chart.animate(dataSet) 就能把数据画成带动画的折线/柱状/环形图,开箱即

175