Android Lollipop 新特性 - Palette;获取图片颜色
Posted xhBruce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Lollipop 新特性 - Palette;获取图片颜色相关的知识,希望对你有一定的参考价值。
android Lollipop 新特性 - Palette
在Android 5.0 之后推出的palette,通过这个方法,我们就可以从一张 bitmap 中提取我们需要的颜色,可以使UI风格更加美观融洽。比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化。
Palette可以提取的颜色如下:
- Vibrant (有活力的)
- Vibrant dark(有活力的 暗色)
- Vibrant light(有活力的 亮色)
- Muted (柔和的)
- Muted dark(柔和的 暗色)
- Muted light(柔和的 亮色)
使用方法
compile ‘com.android.support:palette-v7:25.1.0’
通过一个Bitmap对象来生成一个对应的Palette对象
BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.pic);
Bitmap bitmap = drawable.getBitmap();
Palette.Builder builder = Palette.from(bitmap);
拿到提取到的颜色值
- Palette.getVibrantSwatch()
- Palette.getDarkVibrantSwatch()
- Palette.getLightVibrantSwatch()
- Palette.getMutedSwatch()
- Palette.getDarkMutedSwatch()
- Palette.getLightMutedSwatch()
AsyncTask<Bitmap, Void, Palette> generate = builder.generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// 有活力的颜色
vibrant = palette.getVibrantSwatch();
// 有活力的暗色
darkVibrant = palette.getDarkVibrantSwatch();
// 有活力的亮色
lightVibrant = palette.getLightVibrantSwatch();
// 柔和的颜色
muted = palette.getMutedSwatch();
// 柔和的暗色
darkMuted = palette.getDarkMutedSwatch();
// 柔和的亮色
lightMuted = palette.getLightMutedSwatch();
// 使用颜色
// 修改Actionbar背景颜色
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(vibrant.getRgb()));
((Button) findViewById(R.id.text)).setTextColor(vibrant.getTitleTextColor());
((Button) findViewById(R.id.text)).setBackgroundColor(vibrant.getRgb());
((Button) findViewById(R.id.text1)).setTextColor(darkVibrant.getTitleTextColor());
((Button) findViewById(R.id.text1)).setBackgroundColor(darkVibrant.getRgb());
((Button) findViewById(R.id.text2)).setTextColor(lightVibrant.getTitleTextColor());
((Button) findViewById(R.id.text2)).setBackgroundColor(lightVibrant.getRgb());
((Button) findViewById(R.id.text3)).setTextColor(muted.getTitleTextColor());
((Button) findViewById(R.id.text3)).setBackgroundColor(muted.getRgb());
((Button) findViewById(R.id.text4)).setTextColor(darkMuted.getTitleTextColor());
((Button) findViewById(R.id.text4)).setBackgroundColor(darkMuted.getRgb());
((Button) findViewById(R.id.text5)).setTextColor(lightMuted.getTitleTextColor());
((Button) findViewById(R.id.text5)).setBackgroundColor(lightMuted.getRgb());
}
});
Swatch 样本对象,这个样本对象是Palette的一个内部类,它提供了一些获取最终颜色的方法
- getPopulation(): 样本中的像素数量
- getRgb(): 颜色的RBG值
- getHsl(): 颜色的HSL值
- getBodyTextColor(): 主体文字的颜色值
- getTitleTextColor(): 标题文字的颜色值
Palette 实例
以上是关于Android Lollipop 新特性 - Palette;获取图片颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何使用为 Android 5.0 (Lollipop) 提供的新 SD 卡访问 API?