android Palette调色板使用详解
程序员文章站
2023-12-12 13:46:52
palette是一个可以从图片(bitmap)中提取颜色的帮助类,可以使ui更加美观,根据图片动态的显示相应的颜色。现在最新的api是在版本22.0.0添加的,本篇文章也是...
palette是一个可以从图片(bitmap)中提取颜色的帮助类,可以使ui更加美观,根据图片动态的显示相应的颜色。现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版本(注意版本之间api的不同)。
应用项目:https://github.com/dingmouren/paletteimageview
应用中的效果 demo 效果
palette可以提取的颜色:
- vibrant (有活力的)
- vibrant dark(有活力的 暗色)
- vibrant light(有活力的 亮色)
- muted (柔和的)
- muted dark(柔和的 暗色)
- muted light(柔和的 亮色)
使用方法: module的build.gradle中引用
compile 'com.android.support:palette-v7:25.3.1'
使用步骤:
1.获取palette对象,也就是图像调色板
2.获取从图像调色板生成的色样
3.从色样中提取相应颜色
1.获取palette对象,也就是图像调色板
获取palette对象有同步和异步两种方式,建议使用异步获取palette对象
// synchronous palette p = palette.from(bitmap).generate(); // asynchronous palette.from(bitmap).generate(new paletteasynclistener() { public void ongenerated(palette p) { // use generated instance } });
2.获取从图像调色板生成的色样
可以获取到六种色样,但是有的时候获取不到对应的色样对象,必须注意非空判断。
palette.swatch vibrant = palette.getvibrantswatch();//有活力的 palette.swatch vibrantdark = palette.getdarkvibrantswatch();//有活力的,暗色 palette.swatch vibrantlight = palette.getlightvibrantswatch();//有活力的,亮色 palette.swatch muted = palette.getmutedswatch();//柔和的 palette.swatch muteddark = palette.getdarkmutedswatch();//柔和的,暗色 palette.swatch mutedlight = palette.getlightmutedswatch();//柔和的,亮色
3.从色样中提取相应颜色
通过 getrgb() 可以得到最终的颜色值并应用到ui中。getbodytextcolor() 和 gettitletextcolor() 可以得到此颜色下文字适合的颜色,这样很方便我们设置文字的颜色,使文字看起来更加舒服。
swatch.getpopulation(): 样本中的像素数量 swatch.getrgb(): 颜色的rbg值 swatch.gethsl(): 颜色的hsl值 swatch.getbodytextcolor(): 主体文字的颜色值 swatch.gettitletextcolor(): 标题文字的颜色值
demo的代码中没有对获取到的色样对象进行非空判断,注意一定要加上非空判断
public class mainactivity extends appcompatactivity { private static final string tag = mainactivity.class.getname(); private linearlayout line1,line2,line3,line4,line5,line6; private textview tv1_1,tv1_2,tv2_1,tv2_2,tv3_1,tv3_2,tv4_1,tv4_2,tv5_1,tv5_2,tv6_1,tv6_2; private list<linearlayout> bgs = new arraylist<>(); private list<textview> bodytexts = new arraylist<>(); private list<textview> titletexts = new arraylist<>(); private list<palette.swatch> swatchs = new arraylist<>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); imageview img = (imageview) findviewbyid(r.id.img); initview(); bitmap bitmap = ((bitmapdrawable)img.getdrawable()).getbitmap(); if (bitmap == null){ return; } palette.from(bitmap).generate(listener); } private palette.paletteasynclistener listener = new palette.paletteasynclistener() { @override public void ongenerated(palette palette) { if (palette != null){ palette.swatch vibrant = palette.getvibrantswatch();//有活力的 palette.swatch vibrantdark = palette.getdarkvibrantswatch();//有活力的,暗色 palette.swatch vibrantlight = palette.getlightvibrantswatch();//有活力的,亮色 palette.swatch muted = palette.getmutedswatch();//柔和的 palette.swatch muteddark = palette.getdarkmutedswatch();//柔和的,暗色 palette.swatch mutedlight = palette.getlightmutedswatch();//柔和的,亮色 swatchs.clear(); swatchs.add(vibrant);swatchs.add(vibrantdark);swatchs.add(vibrantlight); swatchs.add(muted);swatchs.add(muteddark);swatchs.add(mutedlight); show(); } } }; private void show() { for (int i = 0; i < 6; i++) { bgs.get(i).setbackgroundcolor(swatchs.get(i).getrgb()); bodytexts.get(i).settextcolor(swatchs.get(i).getbodytextcolor()); titletexts.get(i).settextcolor(swatchs.get(i).gettitletextcolor()); } } private void initview() { line1 = (linearlayout) findviewbyid(r.id.line1); line2 = (linearlayout) findviewbyid(r.id.line2); line3 = (linearlayout) findviewbyid(r.id.line3); line4 = (linearlayout) findviewbyid(r.id.line4); line5 = (linearlayout) findviewbyid(r.id.line5); line6 = (linearlayout) findviewbyid(r.id.line6); bgs.clear(); bgs.add(line1);bgs.add(line2);bgs.add(line3);bgs.add(line4);bgs.add(line5);bgs.add(line6); tv1_1 = (textview) findviewbyid(r.id.tv1_1); tv2_1 = (textview) findviewbyid(r.id.tv2_1); tv3_1 = (textview) findviewbyid(r.id.tv3_1); tv4_1 = (textview) findviewbyid(r.id.tv4_1); tv5_1 = (textview) findviewbyid(r.id.tv5_1); tv6_1 = (textview) findviewbyid(r.id.tv6_1); tv1_2 = (textview) findviewbyid(r.id.tv1_2); tv2_2 = (textview) findviewbyid(r.id.tv2_2); tv3_2 = (textview) findviewbyid(r.id.tv3_2); tv4_2 = (textview) findviewbyid(r.id.tv4_2); tv5_2 = (textview) findviewbyid(r.id.tv5_2); tv6_2 = (textview) findviewbyid(r.id.tv6_2); bodytexts.clear();titletexts.clear(); bodytexts.add(tv1_1);bodytexts.add(tv2_1);bodytexts.add(tv3_1);bodytexts.add(tv4_1);bodytexts.add(tv5_1);bodytexts.add(tv6_1); titletexts.add(tv1_2);titletexts.add(tv2_2);titletexts.add(tv3_2);titletexts.add(tv4_2);titletexts.add(tv5_2);titletexts.add(tv6_2); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。