当前位置: 代码迷 >> 综合 >> Google Palette 1 -介绍以及使用
  详细解决方案

Google Palette 1 -介绍以及使用

热度:38   发布时间:2024-02-04 11:38:15.0
  1. Palette 简介
    Google Palette 是一个用来提取图片平均颜色的工具
    最常用的做法就是根据封面来设置详情页面的title 颜色
    例如:
    在这里插入图片描述

在这个例子里,可以看到,使用了视频图片的主要的两个颜色作为title 背景和简介文字的背景
2. Palette 使用
Palette 使用,有同步和异步两种模式,因为会涉及解析图片的问题,所以遇到大图片或者低性能机,有可能会用更多时间去处理。所以建议使用异步方式去解析
eg:其中resource 是一个Bidmap 对象,所以如果是网络图片的话,需要自己去用Glide 等工具下载后使用
异步:

                Palette.from(resource).generate { palette ->//do SomeThing}

同步:

                val palette = Palette.from(resource).generate()//do someThing

通过以上两种方式都可以获取到的Palette 对象
通过getXX 方法可以获取到以下各种模式的 Palette.Swatch 对象

 *     Vibrant //艳丽*     Vibrant Dark //艳丽暗色*     Vibrant Light //艳丽亮色*     Muted //柔和*     Muted Dark // 柔和暗色*     Muted Light //柔和亮色

然后getRGB 就可以获取到我们一般使用的颜色值
eg: 示例图,我所使用的是,title > darkVibrantSwatch ,text > darkMutedSwatch 参考比较一下

  1. 注意问题
    在获取Swatch 时有一定几率会获取到null ,所以防止空指针时注意要判空处理

  2. 完整代码

Palette.from(resource).generate { palette ->//获取到合适颜色Swatchvar vibrantTitle = palette?.darkVibrantSwatchvar vibrantbody = palette?.darkMutedSwatch//当为空时,获取解析到的第一位作为备选if (vibrantTitle == null && palette?.swatches?.size != 0) {vibrantTitle = palette?.swatches?.get(0)}if (vibrantbody == null && palette?.swatches?.size != 0) {vibrantbody = palette?.swatches?.get(0)}//设置颜色vibrantTitle?.let {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {window.statusBarColor = vibrantTitle.rgbapp_bar.setBackgroundColor(vibrantTitle.rgb)}}vibrantbody?.let {ll_root.setBackgroundColor(vibrantbody.rgb)}
}
  相关解决方案