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

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

img

​        (图来自知乎,侵删)

  首先,我们需要获取当前壁纸。这里有两种方法,第一种是直接访问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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值