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

使用Palette API选择颜色

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

你能够使用Palette包设计布局主题, 并把自定义色彩应用到可视化元素中. 比如, 你可以根据专辑封面, 用Palette创建为歌曲创建一个彩色标题卡片, 或者当应用背景图片发生改变时调整toolbar颜色. Palette对象给予你权限访问Bitmap图片里面的颜色, 同时也根据Bitmap提供了6个主要的颜色, 供你填写设计选择.

设置依赖

Palette为库从版本Android Support Library 24.0.0引入, 可以在build.gradle中按照如下代码添加Palette依赖:

android {

compileSdkVersion 27

...

}

dependencies {

...

implementation 'com.android.support:palette-v7:27.1.1'

}

创建Palette对象

Palette给予你权限访问图片中的基本颜色, 以及重叠文本对应的颜色. 可以根据给定资源图片, 使用palette设计应用风格, 动态改变应用的色彩体系.

要创建Palette, 首先在从Bitmap中实例化Palette.Builder. 然后在生成Palette之前, 可以使用Palette.Builder来自定义Palette.

生成Palette实例

首先, 利用Palette的from(Bitmap)方法从Bitmap中生成Palette.Builder. 之后利用这个Builder同步或者异步地生成Palette. 如果你想在generate()方法被调用的线程中创建Palette对象, 使用同步的palette生成. 如果你想在不同的线程上异步地生成Palette, 就要使用Palette.PaletteAsyncListener.onGenerated方法在Palette生成之后立即访问它.

下面的代码片断展示了两种不同的Palette生成方式:

// Generate palette synchronously and return it

public Palette createPaletteSync(Bitmap bitmap) {

Palette p = Palette.from(bitmap).generate();

return p;

}

// Generate palette asynchronously and use it on a different

// thread using onGenerated()

public void createPaletteAsync(Bitmap bitmap) {

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

public void onGenerated(Palette p) {

// Use generated instance

}

});

}

如果你需要持续为多个有序图片生成多个Palette, 考虑将Palette实例缓存起来, 以避免减缓UI性能. 你也不应该在主线程中创建Palette.

自定义Palette

Palette.Builder允许你自定义Palette, 通过从结果Palette中选择多少种颜色, Builder使用图片的什么区域生成Palette, Palette中允许什么颜色等. 比如, 你能够过滤掉黑色, 或者, Builder只能够使用图片的上半部分生成Palette.

通过Palette.Builder中的下列方法, 可以微调Palette尺寸和颜色:

addFilter(): 该方法添加了过滤器, 用以表明结果Palette中什么颜色是允许的. 传入自己的Palette.Filter, 修改isAllowed()方法来决定Palette过滤哪些方法.

maximumColorCount(): 该方法设置了Palette中最大的颜色数目. 默认值是16, 最优值依赖于源图. 对于风景图, 最优值处于8~16, 而肖像图通常拥有16~24个值. 颜色越多, Palette.Builder生成Palette就需要花费超久的时间.

setRegion(): 该方法指出了生成Palette时, Builder使用Bitmap的什么区域. 你只能使用这个方法从Bitmap中生成Palette, 而不会影响源图.

addTarget(): 该方法允许你通过向Builder添加Target色彩配置文件来执行自己的颜色匹配. 如果默认的Target并不有效的话, 高级开发人员能够使用Target.Builder创建自己的Target.

提取色彩配置文件

基于材料设计标准, Palette库从图片中提供常用的色彩配置文件. 每一个文件被一个Target定义, 从Bitmap图片中提取的色彩基于饱和度, 亮度和分布(Bitmap中表示色彩的像素数)对文件进行评分. 对于每一个文件, 具有最好分数的颜色定义了给定图片的色彩配置文件.

默认情况下, 对于给定图片, Palette对象包含16个基本颜色. 在生成Palette的时候, 你可以通过Palette.Builder自定义颜色数. 提取更多的色彩对于每个色彩配置文件提供了更多的潜在匹配, 但也引起Palette.Builder花费更久的时间来生成Palette.

Palette库尝试提取以下6个色彩配置文件:

Light Vibrant

Vibrant

Dark Vibrant

Light Muted

Muted

Dark Muted

每一个Palette.getColor()方法返回了Palette中的颜色, 而每一个Palette关联了一个特定的配置文件, 其中, 被以上6个色彩配置文件名取代. 比如, 获取Dark Vibrant色彩配置文件的方法是getDarkVibrantProfile(). 因为不是所有的图片都会包含所有的色彩配置文件, 所以, 你必须也提供一个默认颜色返回.

2e9064d9610adcc6f9385b4e68a83b21.png

使用样本创建色彩体系

Palette对象也为每一个色彩配置文件生成 Palette.Swatch对象. Palette.Swatch对象包含对象的配置文件关联的颜色和颜色的像素分布.

Swatch拥有额外的方法来访问色彩配置文件更多的信息, 比如HSL值, 像素分布等. 你能够通过使用getBodyTextColor()和getTitleTextColor()来生成更多繁杂的色彩体系和应用主题. 这些方法返回的颜色恰好配合Swatch的颜色使用.

每一个Palette.getSwatch()方法返回了关联特定配置文件的Swatch. 尽管getSwatch()方法并不默认值参数, 如果图片中并不存在特定的某个配置文件, 该方法会返回null. 由此, 你应该在使用Swatch之前判断它是否为空. 比如, 下面的代码从Palette中获取了标题文本颜色, 并检查了Vibrant Swatch是否为空:

Palette.Swatch vibrant = myPalette.getVibrantSwatch();

if(vibrant != null){

int titleColor = vibrant.getTitleTextColor();

// ...

}

要访问Palette中的所有颜色, getSwatches()方法返回了包含图片中生成的所有Swatch的列表, 包括标准的6个色彩配置文件.

下面的代码片断使用了上述代码片断, 同步生成了Palette, 获取了Vibrant Swatch, 改变了Toolbar颜色, 以匹配Bitmap图片. 下面的图片则展示了结果和toolbar

56f1ebc088612b9a0843da56850a8f09.png

// Set the background and text colors of a toolbar given a

// bitmap image to match

public void setToolbarColor(Bitmap bitmap) {

// Generate the palette and get the vibrant swatch

// See the createPaletteSync() method

// from the code snippet above

Palette p = createPaletteSync(bitmap);

Palette.Swatch vibrantSwatch = p.getVibrantSwatch();

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

// Load default colors

int backgroundColor = ContextCompat.getColor(getContext(),

R.color.default_title_background);

int textColor = ContextCompat.getColor(getContext(),

R.color.default_title_color);

// Check that the Vibrant swatch is available

if(vibrantSwatch != null){

backgroundColor = vibrantSwatch.getRgb();

textColor = vibrantSwatch.getTitleTextColor();

}

// Set the toolbar background and text colors

toolbar.setBackgroundColor(backgroundColor);

toolbar.setTitleTextColor(textColor);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf文件如何生成目录 wps_wps制作pdf文档的详细方法

一些用户在使用wps软件的时候,wps怎样制作pdf文档?你们知道怎么操作的吗?对此感兴趣的伙伴们可以去下文看看wps制作pdf文档的详细方法。wps制作pdf文档的详细方法一、打开或生成原始文件本文选择用WPS打开《岳飞传.txt》,并进行智能格式整理。二、添加…

ecshop活动页_ECSHOP团购活动,ECSHOP团购列表

网店的团购活动和现实中的团购差不多。都是希望大量的人参与进来,从而以一个相对优惠的价格买的商品。下面介绍下网店的团购活动。进入后台 > 促销管理 > 团购活动如果已经添加过团购活动的话,这里会看到添加过的所有团购活动。点击右上角的 添加团…

android studio aspectj使用,androidStudio中使用 AspectJ

关于 AOP 的详细介绍请参考 深入理解Android之AOP本文主要介绍 怎么在 AndroidStudio 中使用 AspectJ1 . 在android studio 中新建一个项目 MyApplication2. 在 app 目录下 的 build.gradle 中完成如下配置:apply plugin: com.android.applicationimport org.aspectj.bridge.IM…

ndnsim r语言 ubuntu_Ubuntu14.04安装配置ndnSIM

Ubuntu14.04安装配置ndnSIM预环境Ubuntu14.04官方系统请先使用sudo apt-get update更新一下源列表安装步骤安装boost-libsudo apt-get install build-essential libsqlite3-dev libcrypto-devsudo apt-get install libboost-all-dev其中,build-essential和libboost是…

android ui stencil kit 下载,实用的iOS6/iPhone5 GUI/iPad PSD以及其它版本素材

实用的iOS6/iPhone5 GUI/iPad PSD以及其它版本素材10月 16, 2012评论 (1)Sponsor现在使用Apple旗下产品越来越多,比如iPhoneiPad等,正因如此,我们需要设计这类的apps应用也相对多了,所以如果有一些现用素材的话可以帮助设计师快速…

华为acl怎么生效_华为ACL配置教程(一)

一、ACL基本配置1、ACL规则生效时间段配置(需要先配置设备的时间,建议用ntp同步时间)某些引用ACL的业务或功能需要限制在一定的时间范围内生效,比如,在流量高峰期时启动设备的QoS功能。用户可以为ACL创建生效时间段,通过在规则中引…

android 中文参数,(原)Android: 启动另外的APP及传递参数

有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等。如果你不知道那个APP的Activity,但是知道包名(package name),那么可以使用如下的方法:Intent LaunchIntent getPackageManager().getLaunchIntentForPackage("co…

kafka 主动消费_Kafka核心API——Consumer消费者

Consumer之自动提交在上文中介绍了Producer API的使用,现在我们已经知道如何将消息通过API发送到Kafka中了,那么现在的生产者/消费者模型就还差一位扮演消费者的角色了。因此,本文将介绍Consumer API的使用,使用API从Kafka中消费消…

android下拉弹性gif,android-pulltorefresh 下拉加载中使用gif动图

效果预览:xml布局xmlns:ptr"http://schemas.android.com/apk/res-auto"android:layout_width"fill_parent"android:layout_height"fill_parent"android:divider"#00000000"android:cacheColorHint"#00000000"and…

linux本地时间与utc不一致_Linux下CST和UTC时间的区别以及不一致的解决方法

1.在linux中,用date查看时间的时候显示:2013年 2月 17日 星期三 19:04:14 CST世界协调时间(Universal Time Coordinated,UTC):GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的…

ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?

我有一个更新照片按钮,该按钮连接到facebookgraphAPI并下载当前用户的个人资料图片.我希望刷新视图上的图像,而无需重新加载viewController.有什么办法可以做到这一点?我知道tableview具有reloadData和refreshcontrol,但是我没有使用tableview.class ProfileViewCon…

unity3d android aar,Android Stuido导出AAR 给Unity3D调用注意事项

1. 导出 AAR过程需要注意,依赖的文件并没有打进去,所以要收到拷入到 Unity项目中,如下图中的 support包,是我项目中要用到的:2.删除aar包中重复的 libs下的 jar文件和 jni下的 .so文件,否则调用的时候会报…

识别产品外观的合格软件_产品外观质量视觉检测系统.PDF

产品外观质量视觉检测系统产品外观质量视觉检测系统北京大恒图像视觉有限公司Beijing Daheng Image Vision Co., Ltd公司简介中国大恒(集团)有限公司是中国科学院于 1987 年报经国务院批准创办的高新技术企业,公司于 1996 年至2007 年连续十二年进入全国电子百强企业…

html中图片响应式怎么写,如何使用 HTML5 的picture元素处理响应式图片

图片在响应式网页设计中是出了名的最具挑战性的方面之一。今天我们就来看看如何使用元素来处理响应式图片.让我们先了解一下问题固定宽度,像素完美的网站设计已经离我们远去了。在宽屏显示器,互联网电视,多尺寸的平板电脑和智能手机的今天&am…

安卓 多条通知_安卓11第一版发布:原生滚动截屏、屏幕录像、抄国内ROM这么多...

自2008年第一部Android智能手机HTC G1发布,安卓手机系统已经走过十几个年头。虽然系统存在一些大家吐槽较多的问题,但安卓一直活跃在智能手机系统前沿,不断发展完善着。昨天谷歌刚刚发布了全新的安卓11新系统,这次的系统更新出一些…

python樱花手绘_GitHub 硬核项目:动漫生成器让照片秒变手绘日漫风!!!

根据真实店铺照片生成的效果图,一度以为,这就是某个日漫番剧的截图本文转自:机器之心随手拍张照片,顺势转换为宫崎骏、新海诚等日漫大师的手绘风格作品,这个专门生成动漫图像的 GAN,实测很好用。尽管最近 2…

html表格字体格式转换,【转】常用HTML代码速查表

在搏客中比较常用的代码一、美化文字的代码:1.文字间换行:文字内容文字内容2.一个段落:文字内容3.字体加粗:文字内容4.字体加大:文字内容5.文字标题: 从一号标题H1到六号标题H6,逐渐减小文字内容…

70个python毕设项目_56个具有开创性的Python开源项目-开始使用Python

Python正在蓬勃发展,它的Gistub页面也是如此。今年对于Python来说很棒,我们看到了一些非常强大的python开源项目。今天,我们将列出一些最好的python开源项目;尝试至少对其中一个项目做出贡献,这将有助于提高您的Python…

mysqlmodify_modify与change的区别

对mysql的表的表结构进行修改时,有用到change,modify两个,它们都有“改变”的意思,那它们在功能上有什么区别了?做个试验比较下1、字段重命名:1)changemysql> alter table t1 change number id char(2);…

qnetworkreply 获取状态_谈谈Unity Shader中的采样器状态和(Texture Filtering)纹理滤波方式

参考文章:使用采样器状态 - Unity 手册​docs.unity3d.comhttps://blog.csdn.net/chenjinxian_3D/article/details/51816918​blog.csdn.net根据Unity的参考文档,Unity Shader使用采样器状态有三种方式,分别是:耦合的纹理和采样器…