目录
什么是Palette
Palette是调色板的意思它可以通过提取Bitmap中的颜色来优化界面的色彩搭配。
Palette的使用方法
导入依赖
dependencies {
...
implementation 'com.android.support:palette-v7:27.1.1'
}
核心方法(传入bitmap)
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette 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);
}
});
案例演示
这里使用的是Toolbar+TabLayout+ViewPager结合实现的一个效果
核心代码:
private void setPaletteColor(int position) {
Bitmap bitmap = bitmaps.get(position);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();//获取颜色样本。在这里做了非空判断,如果获取的颜色样本为空就从所有的样本中获取一个样本。
if (vibrant == null) {
for (Palette.Swatch swatch : palette.getSwatches()) {
vibrant = swatch;
break;
}
}
// 这样获取的颜色可以进行改变。
int rgb = vibrant.getRgb();//从样本中获取颜色的RGB值。获取到RGB值之后可以直接给其他控件使用这个值,或者稍微调整这个值的颜色再使用。
tablayout.setBackgroundColor(rgb);
toolbar.setBackgroundColor(rgb);
if (Build.VERSION.SDK_INT > 21) {
Window window = getWindow();
//状态栏改变颜色。
int color = changeColor(rgb);
window.setStatusBarColor(color);
}
}
});
}
/**
* @method changeColor
* @description 修改状态栏颜色
* @date: 2018/9/17 11:33
* @author: LML
* @param rgb 颜色值参数
* @return int
*/
private int changeColor(int rgb) {
int red = rgb >> 16 & 0xFF;
int green = rgb >> 8 & 0xFF;
int blue = rgb & 0xFF;
red = (int) Math.floor(red * (1 - 0.2));
green = (int) Math.floor(green * (1 - 0.2));
blue = (int) Math.floor(blue * (1 - 0.2));
return Color.rgb(red, green, blue);
}
案例源码地址:https://github.com/myml666/PalettesDemo