关于 Android 中的 Palette 类的使用案例:色彩自适应的 Toolbar

来源:互联网 发布:个性婚纱知乎 编辑:程序博客网 时间:2024/06/08 09:37

本文标签: AndroidgithubPaletteBitMap项目Google

Palette类的基本使用

利用 Palette 类能够提取一张图片或者说 BitMap 对象中较为突出的那些颜色,供开发人员使用。

这有什么用呢?这就看你怎么用啦。比如根据页面图片内容,灵活改变当前页面的 UI 主题色调。等会在后面的内容中举个较为实用的例子。

使用Palette 类前,需要在 build.gradle 文件中引入相应的 support 依赖包,比如当前版本:

123
dependencies {    compile 'com.android.support:palette-v7:25.3.0'}

解析图片是一个相对程序而言稍为耗时的过程,所以生成 Palette 对象的过程应该放在子线程当中。为了方便我们使用,AndroidSDK 提供有同步异步两种方式供开发者生成 Palette 对象:

123456789
// 同步方式:必须运行在子线程中Palette p = Palette.from(bitmap).generate();// 异步方式:可以在 UI 线程中执行Palette.from(bitmap).generate(new PaletteAsyncListener() {    public void onGenerated(Palette p) {            }});

Palette API 能够按照我们指定颜色数量的种类提取图片中的颜色,默认是 16 种颜色,可以通过 Palette.Builder API 设置。当然,提取颜色数量越多,耗时越久。考虑到实用性,系统默认提取有如下六种色调的颜色:

  • Vibrant
  • Vibrant Dark
  • Vibrant Light
  • Muted
  • Muted Dark
  • Muted Light

这些颜色都有相应的 getter 方法获取。这里要提到一个 Swatch (样品)类。对 Palette 对象所有颜色相关的操作都可以通过 Swatch 类间接获取。像上面这六种色调,都能通过对应的 Swatch 对象获取到。比如,获取图片主题色,可以直接从 palette 对象中获取:

1
int color = palette.getDominantColor(ContextCompat.getColor(mContext, R.color.blue));

也可以通过 swatch 对象间接获取:

1
int color = palette.getDominantSwatch().getRgb();

差别在于,Swatch 对颜色的相关信息做了一个封装处理。通过 Swatch 对象,我们可以获取颜色的 RGB、HSL 等值,和当前颜色在图片中的占比。更重要的一点是,能够获取适合显示在当前颜色背景中的内容色,比如文本标题颜色等。不得不说,Google 想的真周到,并且在源码设计上也是非常独到。

使用案例:色彩自适应的 Toolbar

前面说过,Palette 的用法可以有很多,就看你怎么用。这里就来举个非常炫酷的例子。

从图片列表页进入详情页,很常见的设计。在详情页,根据不同图片内容,提取主题色调,动态改变 Toolbar 背景色和内容色。这是静态图展示:


页面布局相关的代码这里就不再展示,可以参考我的博客前面有关 MaterialDesign 相关的系列文章,或者直接访问 GitHub 项目:MDStudySamples。

看下本文相关的内容,使用 Palette API 提取图片颜色的的操作代码:

Palette.from(BitmapFactory.decodeResource(getResources(), res))        .generate(new Palette.PaletteAsyncListener() {            @Override            public void onGenerated(Palette palette) {                int color = palette.getDominantColor(ContextCompat.getColor(mContext, R.color.blue));                int colorDark = palette.getDarkMutedColor(color);                int titleTextColor = palette.getDominantSwatch().getTitleTextColor();                mToolbarCtl.setContentScrimColor(color);                mToolbarCtl.setStatusBarScrimColor(colorDark);                mToolbarCtl.setCollapsedTitleTextColor(titleTextColor);                mToolbarCtl.setExpandedTitleColor(titleTextColor);                ToolbarColorizeHelper.colorizeToolbar(mToolbarTb, titleTextColor, PaletteDetailActivity.this);            }        });

ToolbarColorizeHelper 是一个辅助类,用于动态修改 Toolbar 除背景色之外的相关内容颜色,比如 Back Icon,Title 文本,Menu Item Icon 之类的。来源自GitHubGist,博客介绍自 这里。

完整 Demo 代码请访问:
https://github.com/Mike-bel/MDStudySamples

本文由 亦枫 创作并首发于 亦枫的个人博客

写在最后:FOR Freedom 看看外边的世界,以及IT这一行,少不了去Google查资料,最后,安利一个加速器代理。一枝红杏 加速器,去Google查资料是绝对首选,连接速度快,使用也方便。我买的是99¥一年的,通过这个链接(http://whosmall.com/go/yzhx)注册后输上优惠码wh80,终身85折 ,平摊下来,每月才7块钱,特实惠。

本文标签: AndroidgithubPaletteBitMap项目Google

转自 SUN'S BLOG - 专注互联网知识,分享互联网精神!

原文地址: 关于 Android 中的 Palette 类的使用案例:色彩自适应的 Toolbar

相关阅读:GIT能做什么、它和SVN在深层次上究竟有什么不同

相关阅读:分享一些对开发者最有用的、用户友好和功能丰富的Google Chrome扩展工具

相关阅读:分享一些实际Android开发过程中很多相见恨晚的工具或网站

相关阅读:我是 G 粉,一直关注 Google,最近 Google 有一些小动作,可能很多人不太了解

相关阅读:机器学习引领认知领域的技术创新,那么SaaS行业会被机器学习如何改变?

相关阅读:VPS 教程系列:Dnsmasq + DNSCrypt + SNI Proxy 顺畅访问 Google 配置教程

相关阅读: 对程序员有用:2017最新能上Google的hosts文件下载及总结网友遇到的各种hosts问题解决方法及配置详解

相关BLOG:SUN’S BLOG- 专注互联网知识,分享互联网精神!去看看:www.whosmall.com

原文地址:http://whosmall.com/?post=394

0 0
原创粉丝点击