Palette有什么用?

Palette主要功能就是可以从图片中提取各种与颜色有关的元素。通过使用 Palette ,我们可以很轻松的实现界面风格的统一。

Palette的使用很简单,首先你可以从github上添加 palette 的依赖

compile 'com.android.support:palette-v7:26.0.0-alpha1'

或者直接右键你的项目,在OpenmoduleSetting->dependenecies->LibraryDependency 中直接搜索添加 Palette 。

然后你就可以在代码中使用 Palette 了

具体使用如下:

        Palette.Builder builder = Palette.from(BitmapFactory.decodeResource(getResources(), R.drawable.xxx));
builder.generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) { // Palette.Swatch swatch = palette.getVibrantSwatch(); //充满活力的色调
// Palette.Swatch swatch = palette.getLightVibrantSwatch(); //充满活力的亮色调
// Palette.Swatch swatch = palette.getDarkVibrantSwatch(); //充满活力的暗色调 // Palette.Swatch swatch = palette.getMutedSwatch(); //柔和的色调
// Palette.Swatch swatch = palette.getLightMutedSwatch(); //柔和的亮色调
// Palette.Swatch swatch = palette.getDarkMutedSwatch(); //柔和的暗色调
//
int color;
Palette.Swatch swatch = palette.getDominantSwatch();
if (swatch == null) {
color = palette.getDominantColor(getResources().getColor(R.color.colorTheme)); //如果提取不到颜色样本,就使用默认颜色
} else {
color = swatch.getRgb(); //如何提取到颜色样本,就从颜色样本中获得颜色
}
int darkColor = colorBurn(color); //对颜色进行处理,使颜色更深
changeThemeColor(color, darkColor); //切换主题颜色
}
});

该方法是通过异步的方式获得颜色,先通过 Palette.from(Bitmap)传入图片,当 Palette 提取好图片颜色后就会调用 onGenerated(Palette)方法,该方法会传入一个 Palette对象,我们在该方法中对该 Palette 进行一系列操作。

一个 Palette 对象中会保存着该图片的好几种颜色样本,通过上面的代码你可以看到颜色样本的分类。

我们可以通过 palette.getxxxSwatch()方法得到不同的颜色样本(swatch),然后再调用 swatch.getRgb()就可以得到每个样本(swatch)中对应的 RGB 颜色。不同样本获取到的RGB颜色也各不相同,具体的效果你可以自己去试。这里需要注意的是,由于不同图片的颜色不同,有些图片会出现某些 swatch 对象获取不到的状况,如果不做处理就会报空指针错误,并且提取不到颜色。我们可以通过 palette.getxxxColor(int)方法来设置默认的颜色,当 swatch 提取不到颜色时就使用该颜色。

上述代码中获取颜色之后,又调用了colorBurn(int)方法,用来对获取到的颜色进行深色处理。因为一般系统状态栏的颜色都会比界面中的颜色要深一些,所以我们可以通过该方法获取到更深的颜色给系统状态栏。该方法具体实现如下:

    //获得更深的颜色
private int colorBurn(int color) {
int alpha = color >> ;
int red = color >> & 0xFF;
int green = color >> & 0xFF;
int blue = color & 0xFF;
red = (int) Math.floor(red * ( - 0.1));
green = (int) Math.floor(green * ( - 0.1));
blue = (int) Math.floor(blue * ( - 0.1));
return Color.rgb(red, green, blue);
}

获取到颜色后,你就可以给想要设置颜色的控件进行上色了。

如果你想要给系统状态栏和底部的 NavigationBar 上色,可以这样写:

        if (android.os.Build.VERSION.SDK_INT >= ) {
Window window = getWindow();
window.setStatusBarColor(colorBurn(color)); //设置系统栏颜色
window.setNavigationBarColor(colorBurn(color)); //设置底部NavigationBar颜色
}

另外再补充说一下swatch 中的一些方法。swatch 除了getRgb()方法获取 RGB 颜色之外,还有其他获取颜色的方法,具体如下:

swatch.getPopulation():  //像素的数量
swatch.getRgb(): //RGB颜色
swatch.getHsl(): //HSL颜色
swatch.getBodyTextColor(): //用于内容正文文本的颜色
swatch.getTitleTextColor(): //标题文本的颜色

Palette 的使用的更多相关文章

  1. Android开发-之认识palette

    Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...

  2. Android开发学习之路-Palette颜色提取工具类使用

    视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...

  3. 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法

    在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...

  4. GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则

    1,如何让palette支持拖拽(DnD) 在*PaletteFactory类中,把私有类NodeToolEntry 和LinkToolEntry的基类修改为PaletteToolEntry.并在构造 ...

  5. PowerDesigner工具箱(palette)如何打开

    我使用的PowerDesigner是15.1版本的,其他版本的操作可能会有所不同 我们在使用PowerDesigner的时候,有时候可能会不小心把悬浮的工具箱隐藏掉,就是下面这个东西 怎么显示出来呢, ...

  6. android 5.X之使用Palette

    这几天为了学些android5.0版本sdk的新特性,折腾了好久.AndroidStudio被我反复的安装又卸载又安装,在eclipse和AndroidStudio 之间来回折腾.没想到sdk升级到5 ...

  7. Android Material Design NavigationView 及 Palette 颜色提取器

    DrawerLayout + NavigationView DrawerLayout布局,通常在里面添加两个子控件,程序主界面添加到NavitagionView前面. <android.supp ...

  8. Android L 之 RecyclerView 、CardView 、Palette

    转: http://blog.csdn.net/xyz_lmn/article/details/38735117 <Material Design>提到,Android L版本中新增了Re ...

  9. Android Material Design之Toolbar与Palette

    转:http://blog.csdn.net/jdsjlzx/article/details/41441083 前言 我们都知道Marterial Design是Google推出的全新UI设计规范,如 ...

  10. CAD二次开发(.NET)之PaletteSet和Palette

    在CAD中经常用到停靠或浮动的PaletteSet,比如:特性.图层特性管理器.工具选项板等(以下截图来自AutoCAD2010界面). 特性PaletteSet(停靠) 图层特性管理器Palette ...

随机推荐

  1. windows下 RN 环境搭建

    01.安装 Android Studio 02.NodeJs 03.Python204.JDK 05.安装Genymotion模拟器06.java 环境配置07.andriud sdk 配置08.An ...

  2. CLion的使用

    配置远程Linux编译器 实现目标:1.将项目中的源码和target和Linux服务器同步.2.代码在服务器端运行 配置ToolChains setting -> Build,Execution ...

  3. EventLoop

    文章资料来自 Node.js 事件循环机制 JS灵魂之问(下) EventLoop的中国名字叫事件循环,这个玩意真的是高深莫测,一般开发都用不到,代码只管写就行,虽然不用懂,但是面试就是要问,这对我这 ...

  4. 数据库建模工具pd的使用

  5. [题解] LuoguP5666 树的重心

    这个题......确实是CSPNOIP题qwq 感觉猜到一个性质就差不多了,首先,对于一棵树,随便拎一个节点\(rt\)当根节点,那么他的重心一定在\(rt\)的重儿子里,进一步的,可以发现重心一定在 ...

  6. 解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题

    1.无效的方法: (1)执行 df -m,然后查看U盘设备是否挂载到了/media,导致cd-rom不能被挂载,执行 umount  /media. (2)在光驱加载安装界面,把U盘拔下换到电脑的另外 ...

  7. django 实现 内网访问 和 用花生壳进行内网穿透

    1.在setting.py中找到  ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = ['*',]2.启动服务时使用如下命令行 python .\manage.py runs ...

  8. springboot#filter

    _ Filter不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链.完 ...

  9. JVM探秘:JVM的参数类型

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. JVM的参数类型,大致可以分为标准参数.X参数.XX参数,而XX参数又可以分为Bool ...

  10. Java IO流学习总结(转)

    原文地址:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 ...