Palette 的使用
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 的使用的更多相关文章
- Android开发-之认识palette
Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...
- Android开发学习之路-Palette颜色提取工具类使用
视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...
- 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法
在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...
- GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则
1,如何让palette支持拖拽(DnD) 在*PaletteFactory类中,把私有类NodeToolEntry 和LinkToolEntry的基类修改为PaletteToolEntry.并在构造 ...
- PowerDesigner工具箱(palette)如何打开
我使用的PowerDesigner是15.1版本的,其他版本的操作可能会有所不同 我们在使用PowerDesigner的时候,有时候可能会不小心把悬浮的工具箱隐藏掉,就是下面这个东西 怎么显示出来呢, ...
- android 5.X之使用Palette
这几天为了学些android5.0版本sdk的新特性,折腾了好久.AndroidStudio被我反复的安装又卸载又安装,在eclipse和AndroidStudio 之间来回折腾.没想到sdk升级到5 ...
- Android Material Design NavigationView 及 Palette 颜色提取器
DrawerLayout + NavigationView DrawerLayout布局,通常在里面添加两个子控件,程序主界面添加到NavitagionView前面. <android.supp ...
- Android L 之 RecyclerView 、CardView 、Palette
转: http://blog.csdn.net/xyz_lmn/article/details/38735117 <Material Design>提到,Android L版本中新增了Re ...
- Android Material Design之Toolbar与Palette
转:http://blog.csdn.net/jdsjlzx/article/details/41441083 前言 我们都知道Marterial Design是Google推出的全新UI设计规范,如 ...
- CAD二次开发(.NET)之PaletteSet和Palette
在CAD中经常用到停靠或浮动的PaletteSet,比如:特性.图层特性管理器.工具选项板等(以下截图来自AutoCAD2010界面). 特性PaletteSet(停靠) 图层特性管理器Palette ...
随机推荐
- HihoCoder第五周:标准动态规划
这周的题目是最标准最简单的动态规划了,自己一直以来对动态规划都不是很理解,这次也是好好记录一下. 题目1 :数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 ...
- 编程练习:求某个数的n次方,返回其个位和十位
#!/usr/bin/env python def pow1(n,m): if m==0: return 1 if m==-1: return (1/n) if m & 1 != 0: ret ...
- MySQL 中的数据库名称、数据表名称、字段名称
如何查询Oracle,Sql Server,MySQL 中的数据库名称.数据表名称.字段名称 分类: Database2012-09-24 22:16 7034人阅读 评论(0) 收藏 举报 数据库s ...
- gojs 部分功能实现
最近做的项目用到了gojs,使用了一段时间发现其功能特别强大,先记录下目前自己用到的把 1. 初始化画布 myDiagram = $(go.Diagram, "myDiagramDiv&qu ...
- EXTjs开发————优雅的用extjs写一个柱状图
简单的写法,extjs可以直接引用插件来写,这里将我发表在百度文库的文档简述下来,有兴趣也可以关注我的百度文库,ID:该用户已失踪. 主要部分的代码: $(document).ready(functi ...
- 利用Python实现自动扫雷
自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1python的第三方库:win ...
- BAT 五路internet负载均衡
一个网上下载的bat文件 也不记得从那里下载的了 记得似乎需要管理员权限运行 依稀记得测试有效 放在这里做个记录 @echo off echo. echo ╭─────────╮ echo ╭──── ...
- Linux 下配置多路径及SCSI扫描磁盘重新发现大小
Linux SCSI扫描磁盘重新发现大小: # for i in `find /sys/class/scsi_host/host*`; do echo 1 >> $i/issue_lip; ...
- Sass - &引用父选择器
描述: 您可以使用&字符选择父级选择器. 它告诉父选择器应该插入的位置. 例一:&在前 h3 { font-size: 20px margin-bottom: 10px &.s ...
- 八十八、SAP中ALV事件之二,事件的定义和事件子例程
一.我们来到SE37,找到REUSE_ALV_EVENTS_GET相关的定义 二.我们需要用到下面这3个事件 三.我们添加一个第五步,并把显示ALV座位第六步.在第五步中定义三个事件 四.在末尾,添加 ...