​  关注这个问题首先是因为我队友某天吐槽,说整些奇奇怪怪的东西不如整个什么手机自适应手机壳主题。当然这个东西不是那么好实现的,毕竟已经脱离了软件层面涉及到硬件层面了。但是,转念一想,是否可以弄一个自适应壁纸主题,这样就可以统一一下整个系统的观感。Android 12确实满足了这个幻想,在其新特性中,赫然便是一项:用户可根据壁纸主色调更换系统主题色。

​        (图来自知乎,侵删)

  首先,我们需要获取当前壁纸。这里有两种方法,第一种是直接访问Android的壁纸目录:(老版本)/data/data/com.android.settings/files/wallpaper,(新版本)/data/system/users/0/wallpaper,这种稍后再说。第二种是使用WallpaperManager类获取当前壁纸。

  1. FLAG_LOCK可获取当前锁屏壁纸

  2. FLAG_SYSTEM可获取当前系统桌面壁纸

WallpaperManager m_WallpaperManager = WallpaperManager.getInstance(this);
​
BitmapDrawable m_BitmapDrawable = wallpaperManager.getDrawable(); // 默认获取系统壁纸
​
Bitmap m_BitMap = m_BitmapDrawable.getBitmap();  // 获取系统壁纸的Bitmap

  接下来就是获取壁纸的主色调了。这里可以使用Palette,注意使用Palette需要引入库com.android.support:palette-v7:23.2.0(版本号可能不相同)。然后就可以传递上述获取的Bitmap给Palette,并调用Palette.generate()同步或Palette.generateAsync()异步创建一个Palette对象。

Palette m_Palette = Palette.generate(m_Bitmap); // 同步
​
Palette m_Palette_Async = Palette.generateAsync(m_Bitmap); // 异步

  这样我们可以获取到不同的颜色样本

Palette.Swatch VibrantSwatch = palette.getVibrantSwatch(); // 充满活力的色调
​
Palette.Swatch LightVibrantSwatch = palette.getLightVibrantSwatch(); // 充满活力的亮色调
​
Palette.Swatch DarkVibrantSwatch = palette.getDarkVibrantSwatch(); // 充满活力的暗色调
​
Palette.Swatch MutedSwatch = palette.getMutedSwatch(); // 柔和的色调
​
Palette.Swatch LightMuteSwatch = palette.getLightMutedSwatch(); // 柔和的亮色调
​
Palette.Swatch DarkMutedSwatch = palette.getDarkMutedSwatch(); // 柔和的暗色调

  判空后,就可以获取到我们需要的值了。

vibrant.getPopulation(): // 样本中的像素数量
​
vibrant.getRgb(): // 颜色的RGB值
​
vibrant.getHsl(): // 颜色的HSL值
​
vibrant.getBodyTextColor(): // 主体文字的颜色值
​
vibrant.getTitleTextColor(): // 标题文字的颜色值

  最后只需要修改frameworkd/base/core/res/res/values/themes_material.xml中的颜色值即可

<color name="material_deep_teal_500">#ff008577</color>

可能的确大概是在写废话吧

author: Little_Leier

Android 12新特性之获取壁纸主色调并设置系统主题色相关推荐

  1. Android N 新特性

    2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为"牛轧糖" 本届I/O开发者大会上,Goog ...

  2. Android O 新特性和行为变更总结

    Android O新特性和行为变更总结 原文地址:https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&id ...

  3. Android O新特性和行为变更总结zz

    https://mp.weixin.qq.com/s/Ezfm-Xaz3fzsaSm0TU5LMw Android O 行为变更 https://developer.android.google.cn ...

  4. 社区说|Android 13 新特性 EROFS-只读文件系统解析

    活动时间 7 月 28 日(本周四) 20:00 - 21:00 活动日程 20:00 - 20:45 主题分享 Android 13新特性 EROFS-只读文件系统解析 介绍 Android 13的 ...

  5. Android O新特性和行为变更总结

    原文地址(QQ音乐微信公众号首发): https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&idx=1&am ...

  6. Android 12 新APP启动画面(SplashScreen API)简介源码分析

    以往的启动画面 默认情况下刚启动APP时会显示一会白色背景 如果把这个启动背景设置为null,则一闪而过的白色会变成黑色 如果把启动Activity设置为背景透明[< item name=&qu ...

  7. Android 13 新特性及适配指南

    Android 13(API 33)于 2022年8月15日 正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目. 截止到笔者撰写这篇文章时 ...

  8. Java 12 新特性与功能

    Java 12 新特性与功能 Java 12是Java SE的第12个版本,于2019年3月19日发布.Java 12的发布背景主要是为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性 ...

  9. 魅族android p,2.Android P新特性实践-Slices

    Android P新特性实践-Slices 概述 在2018年谷歌I/O开发者大会上,谷歌发布了万众期待的Android最新版本-Android P.Slice作为Android P版本更新的一大功能 ...

最新文章

  1. 第一讲 ODE几何方法
  2. C++字符串详解(三) 字符串的查找
  3. Mysql小练习(2)
  4. 玩JDK 12的Switch表达式
  5. 电芯容量在前期循环中容量增加_锂离子电池容量“跳水”背后元凶找到了!——非均匀压力...
  6. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施.doc...
  7. struts1(转)
  8. pr2020lut导入_PS PR AE怎么批量导入LUTS调色预设
  9. swift 使用Moya进行网络请求
  10. Horner法则(秦九韶算法 )的程序实现
  11. VS中更改项目名称(以VS2017为例)
  12. 中国一汽发布L4级智能驾驶技术,解放商用车率先使用;科大讯飞今日将发翻译机2.0版本;阿里巴巴已以50亿控股全球第二大WiFi芯片商乐鑫信息科技
  13. 从管好事提升管理水平--创建事
  14. 【色彩L1笔记:课程导览】
  15. linux无线8179,编译安装0bda 8179无线网卡
  16. Apache Doris FE配置参数
  17. Cox回归之变量筛选的R实现 (Stepwise Variable Selection in R)
  18. 很怀旧的游戏--吃豆子
  19. Xilinx ZYNQ差分时钟
  20. 推荐一款实时翻译软件,通过鼠标进行翻译,小巧实用。

热门文章

  1. 柚子黑卡城市社交电商小程序V4.3.2原版模块打包+小程序
  2. python逐行读取文件
  3. Python数据清洗实战案例--拉勾招聘数据清洗
  4. 市级医药集中采购系统(一)
  5. android中虚线的实现
  6. nyoj754 黑心医生 结构体优先队列
  7. 试题 算法训练 黑心药商 ALGO-1002
  8. java 朋友圈分享接口_Java实现微信公众平台朋友圈分享功能详细代码
  9. SSLContext.getInstance()中参数设置TLS版本无效的问题
  10. 【转】回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议