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 资源包:

  1. compile 'com.android.support:palette-v7:25.1.0'

加载不能在主线程中进行,加载方式有同步加载和异步加载两种:

  • 同步
  1. //在加载图片的后台线程中同步加载Palette palette = Palette.from(bitmap).genrate();
  2. .
  3. .
  4. .
  • 异步
  1. //异步加载Palette.from(bitmap).genrate(new PaletteAsyncListener(){  public void onGenerated(Palette p){
  2. .
  3. .
  4. .
  5. }
  6. });

具体使用代码

这里使用 MvpDemo 中的部分代码,跟 Glide 配合起来使用的,其他辅助类代码直接 Demo 中查看。

  1. //这是 Glide 加载状态的监听回调@Overridepublic boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target,boolean isFromMemoryCache, boolean isFirstResource) {  //获取到 Glide 加载图片的 Bitmap
  2. final Bitmap bitmap = GlideUtils.getBitmap(resource);  //获取到24dp的长度
  3. final int twentyFourDip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,                  24, ZhihuStoryInfoActivity.this.getResources().getDisplayMetrics());  assert bitmap != null;
  4. Palette.from(bitmap)          //设置构建 Palette 时使用的最大颜色数,风景景观推荐值在10-16,人脸图像色值增加到24
  5. .maximumColorCount(3)
  6. .clearFilters()
  7. .setRegion(0, 0, bitmap.getWidth() - 1, twentyFourDip)
  8. .generate(new Palette.PaletteAsyncListener() {              @Override
  9. public void onGenerated(Palette palette) {                  boolean isDark;                  int lightness = ColorUtils.isDark(palette);                  if (lightness == ColorUtils.LIGHTNESS_UNKNOWN) {
  10. isDark = ColorUtils.isDark(bitmap, bitmap.getWidth() / 2, 0);
  11. } else {
  12. isDark = lightness == ColorUtils.IS_DARK;
  13. }                  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)) {
  14. statusBarColor = ColorUtils.scrimify(topColor.getRgb(), isDark, SCRIM_ADJUSTMENT);                          if (!isDark && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  15. ViewUtils.setLightStatusBar(mStoryImg);
  16. }
  17. }                      if (statusBarColor != getWindow().getStatusBarColor()) {
  18. ValueAnimator statusBarColorAnim = ValueAnimator.ofArgb(
  19. getWindow().getStatusBarColor(), statusBarColor);
  20. statusBarColorAnim
  21. .addUpdateListener(new ValueAnimator
  22. .AnimatorUpdateListener() {                                  @Override
  23. public void onAnimationUpdate(ValueAnimator animation) {
  24. getWindow().setStatusBarColor((int) animation.getAnimatedValue());
  25. }
  26. });                                  //设置转换颜色的动画时间
  27. statusBarColorAnim.setDuration(1000L);
  28. statusBarColorAnim.setInterpolator(                                          new AccelerateInterpolator());
  29. statusBarColorAnim.start();
  30. }
  31. }
  32. }
  33. });
  34. }
本文作者:佚名
来源:51CTO

主题颜色提取 ——— Palette相关推荐

  1. Android Palette颜色提取

    2019独角兽企业重金招聘Python工程师标准>>> Palette介绍 Palette是Google在5.0中引入的来获取bitmap颜色值的一个工具类,为了兼容以前的版本,所以 ...

  2. android palette组件用法,Palette颜色提取使用详解

    如果你试过android Lollipop的sdk,你可能注意到了Palette.Palette从图像中提取突出的颜色,这样可以把色值赋给ActionBar.或者其他,可以让界面整个色调统一. 创建P ...

  3. 转载: Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色

    昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈. 中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变App的主题颜色-然后他就被程序员给打了 ...

  4. Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色

    昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈. 中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变App的主题颜色.....然后他就被程序 ...

  5. R作图配色---颜色提取及色彩搭配

    看SCI文章,发现一个规律,越是高分的文章作图越是"花里胡哨",出各种新奇的图,色彩上也很鲜艳,而大多数人就喜欢看那种花里胡哨的.其实很多时候,我们里高分文章的图只差一个思路和配色 ...

  6. Matplotlib科研画图.调色盘颜色提取和更改

    Matplotlib科研画图.调色盘颜色提取和更改 #提取调色盘颜色 palette#提取seaborn调色盘颜色 plt.style.use('default') #清空之前调色盘更改 sns.se ...

  7. 颜色提取工具,一键颜色值复制工具

    这两天开发了一个颜色提取工具,在这之间遇到了一点小问题:"颜色rgb与16进制切换,点击复制到剪切板功能". 目前工具支持功能: 1.一键点击复制到剪切板 2.提供两种主题颜色切换 ...

  8. Ant-design-vue更换主题颜色

    package.json "antd-theme-generator": "^1.2.5", "antd-theme-webpack-plugin&q ...

  9. eclipse主题颜色配置

    eclipse主题颜色配置 qianghaoaho(孤狼) 一.配置eclipse编辑器颜色: 1.到http://eclipsecolorthemes.org/下载喜欢的主题颜色配置文件后缀名为.e ...

最新文章

  1. GD32F103内部Flash做虚拟U盘
  2. js参数使用时常犯的一个低级错误
  3. 安装好MySQL数据库之后dos下操作步骤及建表命令
  4. 【ArcGIS遇上Python】ArcGIS Python实现Modis NDVI批量求年最大值
  5. [css] 如何禁止长按保存或复制图像?
  6. ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构
  7. Linux学习笔记-增量编译(Makefile进一步使用)
  8. Java装饰器模式详解
  9. 牛客OI周赛4-提高组 C 战争(war)
  10. PostgreSQL ALTER TABLE 命令
  11. 计算机硬件故障解决方法,计算机硬件故障分析与解决方法
  12. buck 与ldo效率
  13. java 多线程m3u8下载
  14. [全国十大城市火车票售票点、订票电话(买票再也不用去火车站排队)] – [旅游] – [校内论坛]
  15. 视觉SLAM⑧----视觉里程计Ⅱ(光流法与直接法)
  16. java 纯真ip数据库_Java 快速把2016最新版纯真ip数据库导入mysql的方法
  17. 智能语音小夜灯 开灯关灯只需要说一声!#懒人必备神器
  18. R语言 REmap安装以及城市信息获取失败问题
  19. React Native开发之——Webstorm开发RN配置
  20. C语言:用贪心策略计算活动安排问题的最优解

热门文章

  1. 脱水马铃薯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. 3.3KW车载充电机开关电源方案数字控制单相PFC与全桥LLC
  3. netflix自动续费关闭_如何禁用Netflix的自动播放预览
  4. 大数据周会-本周学习内容总结05
  5. 商业周刊:苹果新CEO需打造强有力管理团队
  6. 蜗牛学院:这6种心态,容易毁掉你的职场
  7. 关于部分手机使用听筒模式播放音频时没有声音的问题
  8. charging hw bq25601充电驱动笔记
  9. 怎样使用计算机操作,鼠标操作怎么用?电脑鼠标操作图文教程
  10. ue4生成粒子发射器