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 Listbgs = new ArrayList<>();

private ListbodyTexts = new ArrayList<>();

private ListtitleTexts = new ArrayList<>();

private List.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);

}

}

android palette组件用法,android Palette使用详解相关推荐

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

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

  2. android palette组件用法,android Palette调色板使用详解

    Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色.现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版 ...

  3. android palette组件用法,Android Material Design:使用Palette优化界面色彩搭配。

    我写过一篇博客介绍了常用Material Design控件的使用. http://www.jianshu.com/p/776cc6329fff 本想把大部分的Material Design的知识点写到 ...

  4. android palette组件用法,Android Palette(调色板)的使用

    一.Palette的简单介绍 android-support-v7-palette 里面的Palette是Android L SDK 中的新特性,可以使用 Palette 从图像中提取出突出的颜色(主 ...

  5. Android JetPack组件之DataBinding的使用详解

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

  6. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  7. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

  8. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  9. Android进阶笔记:Messenger源码详解

    Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...

最新文章

  1. 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)
  2. swift_019(Swift 的类)
  3. linux6.2下安装oracle11g,Oracle Linux6.2下安装Oracle11gR2.docx
  4. 关于对cpu的理解和kvm虚拟机到物理cpu的绑定
  5. vb double显示最大精度_个人信息与对应照片同步显示系统开发
  6. ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
  7. 安卓逆向入门教程(一)
  8. JavaMail发送简单邮件
  9. delphi开发日志——基窗体,使用面向对象编程的编程思想创建基类
  10. c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
  11. cv2 python3.5 linux,ubuntu 16.04 安装 opencv3.2.0 with python 3.5
  12. 关于Calendar用法的一些总结
  13. 代码理解(2009.11.20)
  14. jenkins+maven+gitlab触发构建
  15. 稀缺的“稳定”--业绩导向的基金筛选困局
  16. 制作网络畅销排行榜 HTML 关键代码
  17. Excel中IF函数的嵌套用法(多条件)
  18. Ubuntu 16.04 parted 对 GPT 格式硬盘 (12 TB) 分区
  19. DSO源码解析学习笔记(初始化)
  20. 最详细的Tarjan

热门文章

  1. 如何使用阿里云短信服务实现登录页面,手机验证码登录?
  2. 细说——Cobalt Strike钓鱼
  3. 百度网盘非会员转存文件的正确姿势
  4. 视频编码(H264编码)
  5. 2021年上半年网络工程师真题详解(全套)
  6. 犯得超级低级的错误(Navicat连接linuxOracle提示无监听)
  7. 内网和外网的区别是什么?
  8. 【码蹄集】(百度松果菁英班)MT1063 立方体的体积
  9. jetson orin nx 模组刷机及环境配置(一)
  10. 一个落魄大学生的毕业设计【校园微信小程序】