Palette:从图片提取配色 · AndroidX 源码指南
AAndroidX 源码指南
图形与动画
图形与动画 · androidx.graphics.shapes

Palette:从图片提取配色Shapes 1.2.0-alpha01

同步与异步提取、常用色板与空安全处理。

最后更新 2026-08-01

复制即用

同步提取(位图已在内存时):

import androidx.palette.graphics.Palette
import android.graphics.Bitmap

val palette = Palette.from(bitmap).generate()

val dominant = palette.dominantSwatch
val vibrant = palette.vibrantSwatch
val muted = palette.mutedSwatch

// 取色,未提取到时回退默认色
val bg = palette.getDominantColor(0xFF26232B.toInt())
val accent = palette.getVibrantColor(0xFF6750A4.toInt())

异步提取(避免主线程卡顿):

import androidx.palette.graphics.Palette

Palette.from(bitmap).generate { palette ->
    // 回调在后台线程执行,更新 UI 需切回主线程
    val color = palette.getVibrantColor(defaultColor)
}

常见陷阱

  • 结果全为 null:图过小/颜色单一时 swatch 可能全空,用 getXxxColor(default) 兜底。
  • 主线程同步提取:大图同步 generate() 会卡 UI,用异步回调或降采样。
  • 大图提取慢:先缩略再提取,maximumColorCount(16) 限颜色数。
  • 回调线程:异步回调在后台线程,更新 UI 要切主线程。

要点

  • 色板:vibrant(鲜艳)、muted(柔和)、dark/light 变体、dominant(主色)。
  • Swatch 提供 rgbpopulation(占比)、titleTextColorbodyTextColor
  • 小图提取更快:Palette.from(bitmap).maximumColorCount(16) 可限制颜色数。
  • 结果可能为 null(图过小/颜色单一),用 getXxxColor(default) 或空安全处理。

相关页面