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

您所在的位置:网站首页 安卓主题设置在哪里找 Android 12新特性之获取壁纸主色调并设置系统主题色

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

2023-08-07 04:20| 来源: 网络整理| 查看: 265

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

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

img

  首先,我们需要获取当前壁纸。这里有两种方法,第一种是直接访问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.from(m_Bitmap).generate(); // 同步 Palette m_Palette_Async = Palette.from(m_Bitmap).generateAsync(); // 异步

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

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中的颜色值即可

#ff008577

author: Little_Leier



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3