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 ...
随机推荐
- pta 拯救007(Floyd)
7-9 拯救007(25 分) 在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里 ...
- NCSC敦促开发者淘汰Python 2
导读 Python 2.x即将结束生命,英国国家网络安全中心(NCSC)敦促开发人员尽快从Python 2.x迁移到Python 3.x.越快越好.Python 2.x将于2020年1月1日停止使用, ...
- Java常考面试题(二)(转)
序言 昨天刚开始的"每日5题面试"这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看 ...
- 139. Word Break 以及 140.Word Break II
139. Word Break Given a non-empty string s and a dictionary wordDict containing a list of non-empty ...
- LeetCode1005 K次取反后最大化的数组和(贪心+Java简单排序)
题目: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修 ...
- 基于Ambari的WebUI实现服务缩容
基于Ambari的WebUI实现服务缩容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现服务的扩容 1>.进入到主机的管理界面 2>.查看主机的信息概览 3&g ...
- Golang的基础数据类型-整型
Golang的基础数据类型-整型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.整型概述 Go语言的整数类型一共有10个. int: 默认是有符号(signed)整形,占用空间 ...
- node - 路由的使用
一,服务器文件 app.js .( 要使用路由的文件) const express = require('express') const app = express() const swig = ...
- read和write函数的使用
https://blog.csdn.net/qq_33883085/article/details/88667003
- [转载]SQL Server 数据库定时自动备份
推荐使用SQLserver自带的SSMS工具创建维护计划来实现数据库定时自动备份 “维护计划”是在SSMS的对象资源管理中“管理”节点下面.使用维护计划可以通过可视化的操作,只点点鼠标就可以创建数据库 ...