Palette优化界面色彩搭配

简介: 目录什么是PalettePalette是调色板的意思它可以通过提取Bitmap中的颜色来优化界面的色彩搭配。Palette的使用方法导入依赖dependencies { .

目录

img_8c1544a9a7510500e61788c5d1da7ba7.png

什么是Palette

Palette是调色板的意思它可以通过提取Bitmap中的颜色来优化界面的色彩搭配。

Palette的使用方法

导入依赖

dependencies {
    ...
    implementation 'com.android.support:palette-v7:27.1.1'
}

核心方法(传入bitmap)

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                // 获取到柔和的深色的颜色(可传默认值)
                 palette.getDarkMutedColor(Color.BLUE);
                 // 获取到活跃的深色的颜色(可传默认值)
                 palette.getDarkVibrantColor(Color.BLUE);
                 // 获取到柔和的明亮的颜色(可传默认值)
                 palette.getLightMutedColor(Color.BLUE);
                 // 获取到活跃的明亮的颜色(可传默认值)
                 palette.getLightVibrantColor(Color.BLUE);
                 // 获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值)
                 palette.getVibrantColor(Color.BLUE);
                 // 获取图片中一个最柔和的颜色(可传默认值)
                 palette.getMutedColor(Color.BLUE);
            }
});

案例演示

这里使用的是Toolbar+TabLayout+ViewPager结合实现的一个效果


img_a087ff139934e9746a509f46c6a7aa28.gif

核心代码:

 private void setPaletteColor(int position) {
        Bitmap bitmap = bitmaps.get(position);
        Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                Palette.Swatch vibrant = palette.getVibrantSwatch();//获取颜色样本。在这里做了非空判断,如果获取的颜色样本为空就从所有的样本中获取一个样本。
                if (vibrant == null) {
                    for (Palette.Swatch swatch : palette.getSwatches()) {
                        vibrant = swatch;
                        break;
                    }
                }
                // 这样获取的颜色可以进行改变。
                int rgb = vibrant.getRgb();//从样本中获取颜色的RGB值。获取到RGB值之后可以直接给其他控件使用这个值,或者稍微调整这个值的颜色再使用。
                tablayout.setBackgroundColor(rgb);
                toolbar.setBackgroundColor(rgb);
                if (Build.VERSION.SDK_INT > 21) {
                    Window window = getWindow();
                    //状态栏改变颜色。
                    int color = changeColor(rgb);
                    window.setStatusBarColor(color);
                }

            }
        });
    }
    /**
     * @method  changeColor
     * @description 修改状态栏颜色
     * @date: 2018/9/17 11:33
     * @author: LML
     * @param rgb 颜色值参数
     * @return int
     */
    private int changeColor(int rgb) {
        int red = rgb >> 16 & 0xFF;
        int green = rgb >> 8 & 0xFF;
        int blue = rgb & 0xFF;
        red = (int) Math.floor(red * (1 - 0.2));
        green = (int) Math.floor(green * (1 - 0.2));
        blue = (int) Math.floor(blue * (1 - 0.2));
        return Color.rgb(red, green, blue);
    }

案例源码地址:https://github.com/myml666/PalettesDemo

个人技术博客:https://myml666.github.io

目录
相关文章
阿里云Grafana服务支持一键安装Grafana插件
阿里云Grafana服务支持一键安装Grafana插件
397 2
|
数据采集 SQL 数据可视化
大数据可视化技巧:借助PowerBI提升数据故事讲述力
【4月更文挑战第8天】Power BI助力大数据可视化,支持多种数据源连接,如SQL Server、Excel,提供数据清洗与转换功能。通过选择合适图表类型、运用颜色和大小强化表达,创建交互式仪表板。讲述数据故事时,注重故事主线设计,利用叙事技巧引导观众,并添加文本说明。分享已完成报告,提升数据驱动决策能力。动手实践,体验Power BI的强大与易用。
526 0
|
机器学习/深度学习 数据可视化 数据挖掘
初学者该如何选择最适合自己的图像分类模型
初学者该如何选择最适合自己的图像分类模型
2210 0
初学者该如何选择最适合自己的图像分类模型
|
IDE 机器人 开发工具
基于ESP32的机器狗
基于ESP32的机器狗
350 0
|
存储 Java 数据库连接
南大通用GBase 8s大对象类型clob和text的比较说明
本文探讨了GBase数据库中用于存储大对象数据的字段类型,包括TEXT、CLOB、BYTE和BLOB,分析了它们的特点、适用场景及在实际应用中的最佳实践。重点介绍了不同数据大小对应的字段类型选择,以及在数据库工具和程序中操作这些类型的方法,强调了合理选择字段类型对提升数据库性能的重要性。
|
机器学习/深度学习 人工智能 算法框架/工具
探索AI在医疗诊断中的应用
本文将带你深入了解人工智能如何在医疗诊断领域大放异彩。我们将一起探讨深度学习模型如何助力医生进行疾病预测,以及AI技术如何提高医疗图像分析的准确性。文章还将展示一些实用的代码示例,让你更直观地理解AI在医疗诊断中的应用。
303 5
|
存储 分布式计算 资源调度
Hadoop集群的扩展性与容错能力
【8月更文第28天】Hadoop 是一种用于处理和存储大规模数据集的开源软件框架。它由两个核心组件构成:Hadoop 分布式文件系统 (HDFS) 和 MapReduce 计算框架。Hadoop 的设计考虑了可扩展性和容错性,使其成为大规模数据处理的理想选择。
450 0
|
前端开发 Python
(三)整合 React 项目静态文件到 Django 项目
(三)整合 React 项目静态文件到 Django 项目
250 9
|
机器学习/深度学习 传感器 数据采集
机器学习实战 —— 工业蒸汽量预测(一)
机器学习实战 —— 工业蒸汽量预测(一)
552 1
|
监控 Java API
如何在Spring Boot中集成Elastic APM进行应用性能监控
如何在Spring Boot中集成Elastic APM进行应用性能监控