图形与动画
图形与动画 · 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提供rgb、population(占比)、titleTextColor、bodyTextColor。- 小图提取更快:
Palette.from(bitmap).maximumColorCount(16)可限制颜色数。 - 结果可能为 null(图过小/颜色单一),用
getXxxColor(default)或空安全处理。