我写过一篇博客介绍了常用Material Design控件的使用。

http://www.jianshu.com/p/776cc6329fff

本想把大部分的Material Design的知识点写到一个博客中,结果无奈东西太多只好分开写。这篇博客介绍的是Palette调色板的使用。

源码地址:https://github.com/AxeChen/MaterialDesignSimple

示例代码(由于提交中不慎修改了其他module的代码,所以用红框标出了)

1、Palette的基本理解

Palette是调色版的意思,用它能获取到Bitmap中一些活跃的颜色,其他控件通过设置这些颜色来优化界面色彩搭配。

效果图:

没有使用Palette调色时。Toolbar和TabLayout等控件是蓝色,和图片很明显不协调。

没使用Palette调色效果图

使用Palette调色后。Toolbar、TabLayout状态栏等会根据图片展示比较搭配的颜色。

注意:Palette并不只适用于我写的示例,Palette应用的情况很多,我这里只用作效果展示。

使用Palette调色效果图

2、Palette的基本使用

Palette使用起来非常简单,没有比较复杂的步骤。

2.1、导入依赖

compile 'com.android.support:palette-v7:23.4.0'

2.2、主要方法

调用Palette.from() 方法将bitmap传入,然后在回调中获取颜色值。

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {

@Override

public void onGenerated(Palette palette) {

}

});

通过Palette 可以获取到一些颜色值。

// 获取到柔和的深色的颜色(可传默认值)

palette.getDarkMutedColor(Color.BLUE);

// 获取到活跃的深色的颜色(可传默认值)

palette.getDarkVibrantColor(Color.BLUE);

// 获取到柔和的明亮的颜色(可传默认值)

palette.getLightMutedColor(Color.BLUE);

// 获取到活跃的明亮的颜色(可传默认值)

palette.getLightVibrantColor(Color.BLUE);

// 获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值)

palette.getVibrantColor(Color.BLUE);

// 获取图片中一个最柔和的颜色(可传默认值)

palette.getMutedColor(Color.BLUE);

// ... 这里省略其他的方法。

以上我都是通过源码中的注释来获取这些方法的基本含义的。Palette的方法并不多,大部分都是返回颜色的方法,这里不再多介绍。

以上方法的效果图:

效果图

2.3、示例代码

示例代码中的TabLayout和Viewpager的联用,我就不介绍了。如果不知道TabLayout和Viewpager的联用可以看我的另一篇写Material Design控件的博客:http://www.jianshu.com/p/776cc6329fff

唯一注意的地方就是使用了不同的获取颜色的方法。

palette.getVibrantSwatch():获取颜色样本。在这里做了非空判断,如果获取的颜色样本为空就从所有的样本中获取一个样本。

vibrant.getRgb():从样本中获取颜色的RGB值。获取到RGB值之后可以直接给其他控件使用这个值,或者稍微调整这个值的颜色再使用。

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {

@Override

public void onGenerated(Palette palette) {

Palette.Swatch vibrant = palette.getVibrantSwatch();

if (vibrant == null) {

for (Palette.Swatch swatch : palette.getSwatches()) {

vibrant = swatch;

break;

}

}

// 这样获取的颜色可以进行改变。

int rbg = vibrant.getRgb();

// ... 省略一些无关紧要的代码

tabLayout.setBackgroundColor(rbg);

toolbar.setBackgroundColor(rbg);

if (Build.VERSION.SDK_INT > 21) {

Window window = getWindow();

//状态栏改变颜色。

int color = changeColor(rbg);

window.setStatusBarColor(color);

}

}

});

// 对获取到的RGB颜色进行修改。(涉及到位运算,我也不是很懂这块)

private int changeColor(int rgb) {

int red = rgb >> 16 & 0xFF;

int green = rgb >> 8 & 0xFF;

int blue = rgb & 0xFF;

red = (int) Math.floor(red * (1 - 0.2));

green = (int) Math.floor(green * (1 - 0.2));

blue = (int) Math.floor(blue * (1 - 0.2));

return Color.rgb(red, green, blue);

}

3、最后

android palette组件用法,Android Material Design:使用Palette优化界面色彩搭配。相关推荐

  1. android palette组件用法,Android Support Palette使用详解

    使用Palette API选择颜色 良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是支持包, 能够从图片中解析出突出的颜色, 从而帮助你创建出视觉迷人的应 ...

  2. android palette组件用法,android Palette使用详解

    Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色.现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版 ...

  3. android palette组件用法,Android Palette(调色板)的使用

    一.Palette的简单介绍 android-support-v7-palette 里面的Palette是Android L SDK 中的新特性,可以使用 Palette 从图像中提取出突出的颜色(主 ...

  4. android palette组件用法,android Palette调色板使用详解

    Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色.现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版 ...

  5. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

  6. html5好看的注册页面设计,Material Design风格用户注册登录界面设计

    这是一款Material Design风格用户注册登录界面设计效果.该设计由用户登录,用户注册和忘记密码三个界面组成.设计中的所有元素都以Material Design为基础,整体效果时尚大方. 使用 ...

  7. 使用Palette优化界面色彩搭配 Jetpack

    Palette 动态获取图片的某种颜色.作用请看下面动图 没有添加笔记 ,直接查看 原文:https://www.jianshu.com/p/dfa9aac6143d 我写过一篇博客介绍了常用Mate ...

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

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

  9. android palette组件用法,Android--Palette基本使用

    Palette是一个类似调色板的工具类,根据传入的bitmap,提取出主体颜色,使得图片和颜色更加搭配,界面更协调.Palette 可以从一张图片中提取颜色,我们可以把提取的颜色融入到App UI中, ...

最新文章

  1. 2021-04-08 Halcon进阶【02】 几何计量【多目标测量】
  2. 易语言逐条读access数据_易语言对ACCESS数据库基础(适合新手)
  3. cmake 学习笔记(三) (转)
  4. openresty开发系列33--openresty执行流程之2重写赋值阶段
  5. 如何简化临时内存的分配与释放
  6. vscode python单步调试_调试期间VSCode python“未验证断点”?
  7. 加载程序中数据库账号密码加密策略wallet_04
  8. easyuefi只能在基于uefi启动的_云计算学习体系-1.1-计算机硬件基础扩展知识BIOS/UEFI/MBR/GPT...
  9. Python二叉树的三种深度优先遍历
  10. mysql大项目:新闻管理系统
  11. Sasha and a Very Easy Test CodeForces - 1109E (数学,线段树)
  12. canvas 封装一个自己的 icon 库
  13. 数据库系统概论(第5版)学习笔记第1章 1.1——数据库系统概论
  14. C#调用WPS转换WORD,EXCEL,PPT文件为PDF
  15. 顶级区块链开发人员工具:涉及框架、IDE、安全工具、测试网络、区块链预言机和节点服务
  16. 学习新方法:帅到没朋友
  17. 运维派网站数据迁移过程踩到的坑和教训
  18. JAVA#泛型'学习札记
  19. Doris入门到精通-阶段一(简介安装使用)
  20. python matlab 普朗克公式黑体光谱辐射出射度 绘图

热门文章

  1. leetcode刷题链表
  2. 2018-8-31安装新版Kali遇到的SSH问题【ssh配置文件没有PermitRootLogin选项】
  3. www packtpub com电子书网站
  4. Linux mmap原理
  5. CentOS7上安装linux QQ
  6. Tomcat 管理和监控工具 - PSI Probe
  7. pip豆瓣换源安装opencv
  8. Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift(BN)
  9. 人才招聘①期 | 中国电信IT研发中心招聘多个职位
  10. IDEA03:数据库CDC、Kafka和连接器Debezium配置