Android Material Design 系列之 Palette 开发详解

本文详述了Android L SDK中的Palette特性,用于从图像中提取关键颜色以统一界面色调。阐述了Palette的工作原理、相关方法,包括同步和异步加载,以及在CardView中的应用案例。同时,强调了在实际开发中使用Palette需要注意的事项,如避免主线程操作。文章还提供了源码下载,便于读者深入学习和实践。

前言

Palette 是 Android L SDK 中的新特性,可以使用 Palette 从图像中提取出突出的颜色(主色调),获取到颜色之后我们再将这个颜色值赋给 ActionBar、状态栏等。从而达到界面色调的统一,使界面美观协调。

Palette 原理:通过得到一个 bitmap,通过方法进行分析,取出 LightVibrantSwatch,DarkVibrantSwatch,LightMutedSwatch,DarkMutedSwatch 这些样本,然后得到 rgb 值。

在这里插入图片描述

一、Palette 相关方法

方法 介绍
Palette.Builder 生成器类,生成 Palette 实例
Palette.Filter 过滤器接口,使 Palette 有更加细腻的颜色过滤
Palette.PaletteAsyncListener 异步加载监听
pattle.Swatch 提供获取结果的色彩样本
from(List<Palette.Switch> switches) 通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette
from(Bitmap bitmap) 通过返回 Palette.Builder 实例来构建 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) 获取图片中一个最柔和的颜色(可传默认值)
  • Palette.Builder 生成器类,生成 Palette 实例

  • Palette.Filter 过滤器接口,使 Palette 有更加细腻的颜色过滤

  • Palette.PaletteAsyncListener 异步加载监听

  • pattle.Swatch 提供获取结果的色彩样本

  • from(List<Palette.Switch> switches) 通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette

  • from(Bitmap bitmap) 通过返回 Palette.Builder 实例来构建 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) 获取图片中一个最柔和的颜色(可传默认值)

二、基本使用

1、导入依赖

implementation 'androidx.palette:palette:1.0.0'

2、Palette 创建

Palette 创建有同步和异步两种方式,开发中我们为了提高应用性能,比较耗时的操作都会采用异步方式。

Bitmap bm =BitmapFactory.decodeResource(getResources(),R.drawable.kale);
// 同步
Palette.Builder builder = Palette.from(bm);
Palette palette=builder.generate();
// 异步
builder.generate(bitmap, new Palette.PaletteAsyncListener() {
   
   
    @Override
    public void onGenerated(Palette palette) {
   
   
    }
}

3、Palette 获取颜色属性

Palette 可以分析提取出以下突出的颜色,在应用适用的环境下灵活使用,如下图所示,获取到屏幕中图片 BitMap 对象,然后通过 Palette 提取到相关属性,在 TextView 设置背景颜色。

Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
   
   
    @Override
    public void onGenerated(@Nullable Palette palette) {
   
   
        //获取到柔和的深色的颜色(可传默认值)
        int darkMutedColor = palette.getDarkMutedColor(Color.BLUE);//如果分析不出来,则返回默认颜色
        //获取到柔和的明亮的颜色(可传默认值)
        int lightMutedColor = palette.getLightMutedColor(Color.BLUE);
        //获取到活跃的深色的颜色(可传默认值)
        int darkVibrantColor = palette.getDarkVibrantColor(Color.BLUE);
        //获取到活跃的明亮的颜色(可传默认值)
        int lightVibrantColor = palette.getLightVibrantColor(Color.BLUE);
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值