主题颜色提取 ——— Palette
Palette
调色板 Palette 是 Android L SDK 中的新特性。可以使用 Palette 从图像中提取出突出的颜色(主色调),获取到颜色之后我们再将这个颜色值赋给 ActionBar、状态栏等。从而达到界面色调的统一,使界面美观协调。
Palette 可以提取图片中如下几种特性的颜色:
- Vibrant (有活力的)
- Vibrant dark(有活力的 暗色调)
- Vibrant light(有活力的 明亮)
- Muted (柔和的)
- Muted dark(柔和的 暗色调)
- Muted light(柔和的 明亮)
内部嵌套类
- Palette.Builder
生成器类,生成 Palette 实例。
- Palette.Filter
过滤器接口,使 Palette 有更加细腻的颜色过滤
- Palette.PaletteAsyncListener
异步加载监听
- pattle.Swatch
提供获取结果的色彩样本
所有的公共方法
返回值类型 | 方法及说明 |
---|---|
static Palette |
from(List<Palette.Switch> switches) 通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette |
static Palette.Builder |
from(Bitmap bitmap) 通过返回 Palette.Builder 实例来构建 Palette |
static Palette |
generate(Bitmap bitmap,int numColors) 该方法已被遗弃,建议用 Palette.Builder 来生成Palette |
static Palette |
generate(Bitmap bitmap) 该方法已被遗弃,建议用 Palette.Builder 来生成Palette |
static AsyncTask<Bitmap,Void,Palette> |
generateAsync(Bitmap bitmap,int numColor,Palette.PaletteAsyncListener listener) 该方法已被遗弃,建议用 Palette.Builder 来生成Palette |
static AsyncTask<Bitmap,Void,Palette> |
generateAsync(Bitmap bitmap,Palette.PaletteAsyncListener listener) 该方法已被遗弃,建议用 Palette.Builder 来生成Palette |
int |
getColorForTarget(Target target,int defaultColor) 返回一个从目标获取的的 rgb 色值 |
int |
getDarkMutedColor(int defaultColor) 返回一个柔和的暗色调 rgb 值 |
Palette.Swatch |
getDarkMutedSwatch() 返回一个柔和的暗色调样本类 |
int |
getDarkVibrantColor(int defaultColor) 返回一个鲜明的暗色调 rgb 值 |
Palette.Swatch |
getDarkVibrantSwatch() 返回一个鲜明的暗色调样本类 |
int |
getDomainColor(int defaultColor) 返回 Palette 中的主色调 rgb值 |
Palette.Swatch |
getDomainSwatch() 返回一个主色调的样本类 |
int |
getLightMutedColor(int defaultColor) 返回一个柔和的亮色调颜色 rgb |
Palette.Swatch |
getLightMutedSwatch() 返回一个柔和的亮色调样本类 |
int |
getLightVibrantColor(int defaultColor) 返回一个鲜明的亮色调 rgb |
Palette.Swatch |
getLightVibrantSwatch() 返回一个鲜明的亮色调样本类 |
int |
getMutedColor(int defaultColor) 返回一个柔和的颜色 rgb |
Palette.Swatch |
getMutedSwatch() 返回一个柔和的颜色样本类 |
Palette.Swatch |
getSwatchForTarget(Target target) 为给定的目标从 Palette 中返回一个选中样本,如果未找到则返回空 |
List<Palette.Swatch> |
getSwatches() 获取所有用在Palette中的Swatch样本类 |
List<Target> |
getTargets() 获取所有构造 Palette 的 Target |
int |
getVibrantColor(int defaultColor) 获取一个鲜明的颜色 rgb |
Palette.Swatch |
getVibrantSwatch() 获取一个鲜明的样本类 |
使用方式
使用 Palette 需先引入 Palette 的 support 资源包:
- compile 'com.android.support:palette-v7:25.1.0'
加载不能在主线程中进行,加载方式有同步加载和异步加载两种:
- 同步
- //在加载图片的后台线程中同步加载Palette palette = Palette.from(bitmap).genrate();
- .
- .
- .
- 异步
- //异步加载Palette.from(bitmap).genrate(new PaletteAsyncListener(){ public void onGenerated(Palette p){
- .
- .
- .
- }
- });
具体使用代码
这里使用 MvpDemo 中的部分代码,跟 Glide 配合起来使用的,其他辅助类代码直接 Demo 中查看。
- //这是 Glide 加载状态的监听回调@Overridepublic boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target,boolean isFromMemoryCache, boolean isFirstResource) { //获取到 Glide 加载图片的 Bitmap
- final Bitmap bitmap = GlideUtils.getBitmap(resource); //获取到24dp的长度
- final int twentyFourDip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, ZhihuStoryInfoActivity.this.getResources().getDisplayMetrics()); assert bitmap != null;
- Palette.from(bitmap) //设置构建 Palette 时使用的最大颜色数,风景景观推荐值在10-16,人脸图像色值增加到24
- .maximumColorCount(3)
- .clearFilters()
- .setRegion(0, 0, bitmap.getWidth() - 1, twentyFourDip)
- .generate(new Palette.PaletteAsyncListener() { @Override
- public void onGenerated(Palette palette) { boolean isDark; int lightness = ColorUtils.isDark(palette); if (lightness == ColorUtils.LIGHTNESS_UNKNOWN) {
- isDark = ColorUtils.isDark(bitmap, bitmap.getWidth() / 2, 0);
- } else {
- isDark = lightness == ColorUtils.IS_DARK;
- } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { int statusBarColor = getWindow().getStatusBarColor(); final Palette.Swatch topColor = ColorUtils.getMostPopulousSwatch(palette); if (topColor != null && (isDark || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)) {
- statusBarColor = ColorUtils.scrimify(topColor.getRgb(), isDark, SCRIM_ADJUSTMENT); if (!isDark && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- ViewUtils.setLightStatusBar(mStoryImg);
- }
- } if (statusBarColor != getWindow().getStatusBarColor()) {
- ValueAnimator statusBarColorAnim = ValueAnimator.ofArgb(
- getWindow().getStatusBarColor(), statusBarColor);
- statusBarColorAnim
- .addUpdateListener(new ValueAnimator
- .AnimatorUpdateListener() { @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- getWindow().setStatusBarColor((int) animation.getAnimatedValue());
- }
- }); //设置转换颜色的动画时间
- statusBarColorAnim.setDuration(1000L);
- statusBarColorAnim.setInterpolator( new AccelerateInterpolator());
- statusBarColorAnim.start();
- }
- }
- }
- });
- }
主题颜色提取 ——— Palette相关推荐
- Android Palette颜色提取
2019独角兽企业重金招聘Python工程师标准>>> Palette介绍 Palette是Google在5.0中引入的来获取bitmap颜色值的一个工具类,为了兼容以前的版本,所以 ...
- android palette组件用法,Palette颜色提取使用详解
如果你试过android Lollipop的sdk,你可能注意到了Palette.Palette从图像中提取突出的颜色,这样可以把色值赋给ActionBar.或者其他,可以让界面整个色调统一. 创建P ...
- 转载: Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色
昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈. 中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变App的主题颜色-然后他就被程序员给打了 ...
- Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色
昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈. 中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变App的主题颜色.....然后他就被程序 ...
- R作图配色---颜色提取及色彩搭配
看SCI文章,发现一个规律,越是高分的文章作图越是"花里胡哨",出各种新奇的图,色彩上也很鲜艳,而大多数人就喜欢看那种花里胡哨的.其实很多时候,我们里高分文章的图只差一个思路和配色 ...
- Matplotlib科研画图.调色盘颜色提取和更改
Matplotlib科研画图.调色盘颜色提取和更改 #提取调色盘颜色 palette#提取seaborn调色盘颜色 plt.style.use('default') #清空之前调色盘更改 sns.se ...
- 颜色提取工具,一键颜色值复制工具
这两天开发了一个颜色提取工具,在这之间遇到了一点小问题:"颜色rgb与16进制切换,点击复制到剪切板功能". 目前工具支持功能: 1.一键点击复制到剪切板 2.提供两种主题颜色切换 ...
- Ant-design-vue更换主题颜色
package.json "antd-theme-generator": "^1.2.5", "antd-theme-webpack-plugin&q ...
- eclipse主题颜色配置
eclipse主题颜色配置 qianghaoaho(孤狼) 一.配置eclipse编辑器颜色: 1.到http://eclipsecolorthemes.org/下载喜欢的主题颜色配置文件后缀名为.e ...
最新文章
- GD32F103内部Flash做虚拟U盘
- js参数使用时常犯的一个低级错误
- 安装好MySQL数据库之后dos下操作步骤及建表命令
- 【ArcGIS遇上Python】ArcGIS Python实现Modis NDVI批量求年最大值
- [css] 如何禁止长按保存或复制图像?
- ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构
- Linux学习笔记-增量编译(Makefile进一步使用)
- Java装饰器模式详解
- 牛客OI周赛4-提高组 C 战争(war)
- PostgreSQL ALTER TABLE 命令
- 计算机硬件故障解决方法,计算机硬件故障分析与解决方法
- buck 与ldo效率
- java 多线程m3u8下载
- [全国十大城市火车票售票点、订票电话(买票再也不用去火车站排队)] – [旅游] – [校内论坛]
- 视觉SLAM⑧----视觉里程计Ⅱ(光流法与直接法)
- java 纯真ip数据库_Java 快速把2016最新版纯真ip数据库导入mysql的方法
- 智能语音小夜灯 开灯关灯只需要说一声!#懒人必备神器
- R语言 REmap安装以及城市信息获取失败问题
- React Native开发之——Webstorm开发RN配置
- C语言:用贪心策略计算活动安排问题的最优解