Palette的使用

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

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 控件实现内容驱动配色。

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w