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 控件实现内容驱动配色。
精彩的人生需要浪漫、无畏和勇气。
这家伙太懒了,什么也没留下。