- 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 参考比较一下
-
注意问题
在获取Swatch 时有一定几率会获取到null ,所以防止空指针时注意要判空处理 -
完整代码
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)}
}