Android 12新特性之获取壁纸主色调并设置系统主题色
关注这个问题首先是因为我队友某天吐槽,说整些奇奇怪怪的东西不如整个什么手机自适应手机壳主题。当然这个东西不是那么好实现的,毕竟已经脱离了软件层面涉及到硬件层面了。但是,转念一想,是否可以弄一个自适应壁纸主题,这样就可以统一一下整个系统的观感。Android 12确实满足了这个幻想,在其新特性中,赫然便是一项:用户可根据壁纸主色调更换系统主题色。
(图来自知乎,侵删)
首先,我们需要获取当前壁纸。这里有两种方法,第一种是直接访问Android的壁纸目录:(老版本)/data/data/com.android.settings/files/wallpaper,(新版本)/data/system/users/0/wallpaper,这种稍后再说。第二种是使用WallpaperManager类获取当前壁纸。
FLAG_LOCK可获取当前锁屏壁纸
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新特性之获取壁纸主色调并设置系统主题色相关推荐
- Android N 新特性
2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为"牛轧糖" 本届I/O开发者大会上,Goog ...
- Android O 新特性和行为变更总结
Android O新特性和行为变更总结 原文地址:https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&id ...
- Android O新特性和行为变更总结zz
https://mp.weixin.qq.com/s/Ezfm-Xaz3fzsaSm0TU5LMw Android O 行为变更 https://developer.android.google.cn ...
- 社区说|Android 13 新特性 EROFS-只读文件系统解析
活动时间 7 月 28 日(本周四) 20:00 - 21:00 活动日程 20:00 - 20:45 主题分享 Android 13新特性 EROFS-只读文件系统解析 介绍 Android 13的 ...
- Android O新特性和行为变更总结
原文地址(QQ音乐微信公众号首发): https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&idx=1&am ...
- Android 12 新APP启动画面(SplashScreen API)简介源码分析
以往的启动画面 默认情况下刚启动APP时会显示一会白色背景 如果把这个启动背景设置为null,则一闪而过的白色会变成黑色 如果把启动Activity设置为背景透明[< item name=&qu ...
- Android 13 新特性及适配指南
Android 13(API 33)于 2022年8月15日 正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目. 截止到笔者撰写这篇文章时 ...
- Java 12 新特性与功能
Java 12 新特性与功能 Java 12是Java SE的第12个版本,于2019年3月19日发布.Java 12的发布背景主要是为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性 ...
- 魅族android p,2.Android P新特性实践-Slices
Android P新特性实践-Slices 概述 在2018年谷歌I/O开发者大会上,谷歌发布了万众期待的Android最新版本-Android P.Slice作为Android P版本更新的一大功能 ...
最新文章
- 第一讲 ODE几何方法
- C++字符串详解(三) 字符串的查找
- Mysql小练习(2)
- 玩JDK 12的Switch表达式
- 电芯容量在前期循环中容量增加_锂离子电池容量“跳水”背后元凶找到了!——非均匀压力...
- 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施.doc...
- struts1(转)
- pr2020lut导入_PS PR AE怎么批量导入LUTS调色预设
- swift 使用Moya进行网络请求
- Horner法则(秦九韶算法 )的程序实现
- VS中更改项目名称(以VS2017为例)
- 中国一汽发布L4级智能驾驶技术,解放商用车率先使用;科大讯飞今日将发翻译机2.0版本;阿里巴巴已以50亿控股全球第二大WiFi芯片商乐鑫信息科技
- 从管好事提升管理水平--创建事
- 【色彩L1笔记:课程导览】
- linux无线8179,编译安装0bda 8179无线网卡
- Apache Doris FE配置参数
- Cox回归之变量筛选的R实现 (Stepwise Variable Selection in R)
- 很怀旧的游戏--吃豆子
- Xilinx ZYNQ差分时钟
- 推荐一款实时翻译软件,通过鼠标进行翻译,小巧实用。
热门文章
- 柚子黑卡城市社交电商小程序V4.3.2原版模块打包+小程序
- python逐行读取文件
- Python数据清洗实战案例--拉勾招聘数据清洗
- 市级医药集中采购系统(一)
- android中虚线的实现
- nyoj754 黑心医生 结构体优先队列
- 试题 算法训练 黑心药商 ALGO-1002
- java 朋友圈分享接口_Java实现微信公众平台朋友圈分享功能详细代码
- SSLContext.getInstance()中参数设置TLS版本无效的问题
- 【转】回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议