一 什么是Palette
Palette是一个类似调色板的工具类,根据传入的bitmap,提取出主体颜色,使得图片和颜色更加搭配,界面更协调。
Palette 可以从一张图片中提取颜色,我们可以把提取的颜色融入到App UI中,可以使UI风格更加美观融洽。比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化。
二 依赖
compile ‘com.android.support:palette-v7:23.4.0’
Palette可以提取的颜色如下:
- Vibrant (有活力的)
- Vibrant dark(有活力的 暗色)
- Vibrant light(有活力的 亮色)
- Muted (柔和的)
- Muted dark(柔和的 暗色)
- Muted light(柔和的 亮色)
三 使用步骤
1 通过一个Bitmap对象来生成一个对应的Palette对象。
Palette 提供了四个静态方法用来生成对象
- Palette generate(Bitmap bitmap)
- Palette generate(Bitmap bitmap, int numColors)
- generateAsync(Bitmap bitmap, PaletteAsyncListener listener)
- generateAsync(Bitmap bitmap, int numColors, final PaletteAsyncListener listener)
生成方法分为generate(同步)和generateAsync(异步)两种,如果图片过大使用generate方法,可能会阻塞主线程,我们更倾向于使用generateAsync的方法,其实内部就是创建了一个AsyncTask。generateAsync方法需要一个PaletteAsyncListener对象用于监听生成完毕的回调。除了必须的Bitmap参数外,还可以传入一个numColors参数指定颜色数,默认是 16。
2 得到Palette对象后,就可以拿到提取到的颜色值
- Palette.getVibrantSwatch()
- Palette.getDarkVibrantSwatch()
- Palette.getLightVibrantSwatch()
- Palette.getMutedSwatch()
- Palette.getDarkMutedSwatch()
- Palette.getLightMutedSwatch()
3 使用颜色
上面get方法中返回的是一个 Swatch 样本对象,这个样本对象是Palette的一个内部类,它提供了一些获取最终颜色的方法
- getPopulation(): 样本中的像素数量
- getRgb(): 颜色的RBG值
- getHsl(): 颜色的HSL值
- getBodyTextColor(): 主体文字的颜色值
- getTitleTextColor(): 标题文字的颜色值