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,一经查实,立即删除!

相关文章

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

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

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…

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

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

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

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

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

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

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

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

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

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

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

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

android systemui机制,在AS中开发SystemUI(4):设置项目运行机制

1、期望项目如何运行?普通 App 在 run 之后,会编译出 APK,然后 AS 会自动调用 install 命令进行安装,完成安装后会启动 App 的 Launcher Activity。这些 AS 已经帮你自动完成了。如果你的 App 不像 SystemUI 或 Settings 这样贴近…

手机屏幕厂家信息软件_警惕假个税手机软件蹭热点,千万别被窃取私人信息

新个税法从1月初开始实施。2018年12月31日,国家税务总局推出“个人所得税”APP,方便纳税人线上填报资料进行专项抵扣。几天来,这款APP的下载量和注册量大幅增长。随之而来的是,很多商业公司制作的各类“个税”APP也成为热门。这其…

paramiko执行nohup_记一次使用django+paramiko远程操作时报错无法返回问题

前提:以前能力不足,只能用linux命令行形式写了个线上发布工具。采用的是paramiko来调用远程指令。最近自学了点前端的东西,打算用django写一个web版的发布工具,在做正常异步远程操作时候发现都没有什么问题。但是当调用我们游戏的…

图片动画效果html5,8个实用炫酷的HTML5图片动画应用

原标题:8个实用炫酷的HTML5图片动画应用近期我们发布了不少关于HTML5和jQuery的图片动画应用,很多都比较实用,也有一些效果非常炫酷,比如一些HTML5 3D图片动画特效。本文精选了8个实用而且炫酷的HTML5图片动画应用,希望…

ado execute open区别_二极管IN4148和IN4007的应用区别

二极管IN4148和IN4007的定义1N4148 是开关二极管,耐压100V,电流150mA,反向恢复速度快。1N4007 是普通整流二极管,耐压1000V,电流1A ,反向恢复时间在ms级别,只能用于低频电路中。二极管IN4148和I…

html列目录带图片,根据目录下的图片的个数,往html文件填充对应数量的img标签,请问有没有实现这种需求的工具?...

这直接JS就能实现了,实现方式分为【预加载】和【延迟加载】下面是个预加载的例子:首先来一个空的HTML页面和最基本的CSS初始化样式Document* {margin: 0;padding: 0;}.imgwrap li {list-style-type: none;}img {vertical-align: top;}然后我们要往标签里…

input maxlength 汉字_汉字原来这么好玩 第A15版:亲子悦读 20201104期 都市女报

山东师范大学附属小学三年级二班马荃 指导教师:范新瑞《汉字好好玩》是我非常喜欢的一套书,它的作者是台湾女作家张宏如,她毕业于台湾大学历史系,是台湾以哲学的角度研究汉字的第一人。这套书一共有5本。第一本有汉字脸谱、日月星…

将类似html数据打印机,机器人和3D打印机的架构有哪些相似之处

工业4.0参考架构模型(RAMI 4.0)以一个三维模型展示了制造业涉及的所有关键要素,在这个模型的等级层次维度(右侧水平轴)描述了一个7层的自动化层级,如图1所示,从下到上依次是:产品,现场设备,控制设备&#x…

access inner join 数据类型不匹配_用Access开发生产管理系统

刚接触Excel,自以为已经对数据的处理掌握到炉火纯青的地步了,殊不知,山外有山人外有人,自从学习了Access,才发现,原来,数据的处理还真不是我们日常工作中所遇到的那么简单。下面,我就…

html文件打开是搜索导航,GitHub - bituplink/OneHtmlNav: 单文件html的网络导航页面,简约并不简单...

OneHtmlNav这是基于小呆导航的超级精简版本,之所以投入了不少精力折腾这个导航,是之前自己网站的导航有点功能不足,看到了小呆导航有我需要的功能,但是确是基于CMS的,有点复杂我又不想再搭建一个平台,所以就…

matlab中结束脚本运行_MATLAB脱单指南

之前发过一篇文章,是关于2019年的小目标,“打浦桥锦鲤”。有留言说,发paper的……有留言说,学习python的……居然还有好多人留言说,要!脱!单!公众号的关注者,女生比例只有…

安卓手机可以改鸿蒙吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…