关于 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
- 关于 Android 中的 Palette 类的使用案例:色彩自适应的 Toolbar
- Android Palette 调色板 的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android L中的RecyclerView 、CardView 、Palette的使用
- android中关于toolbar的使用
- 关于powerdesigner 的palette
- Android Material Design:使用Palette优化界面色彩搭配。
- Android 5.0 Palette的使用小结
- Android RecyclerView、CardView、Palette的使用
- Android 5.X Color Palette的使用
- 使用 Palette 让你的 UI 色彩与内容更贴合
- Palette的使用
- Palette的使用
- A*Pathfinding Project学习之【2】插件的使用
- Java多线程探究-多线程安全问题
- java 文件copy
- 【C语言】操作符描述,示例,优先级
- Accelerated C++<4-6>
- 关于 Android 中的 Palette 类的使用案例:色彩自适应的 Toolbar
- spring4
- VC怎么调用ActiveX
- HOJ2000 ASCII码排序
- 使用FrameLayout制作的摇杆控件
- Oulipo KMP
- 手机web网站 打开QQ ,微信
- redis bio异步组件的源码分析
- PAT A.1082. Read Number in Chinese