android 如何根据前景图片动态改变状态栏的颜色?
How to change color of status bar dynamically in android based upon the foreground image?
我想实现我们在 WhatsApp 中看到的相同功能,当看到一个人的个人资料时,状态栏的颜色会根据
根据图像的颜色。
它叫做 Pallete,使用下面的函数,只需传递您的位图图像即可
private void setUpPalette(Bitmap bitmap) {
// you passed your Bitmap image;
Palette.from(bitmap).
generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
if (palette != null) {
//default color is yellow
// set the color to toolbar, whatever
int extColor = palette.getVibrantColor(ContextCompat.getColor(MainActivity.this, R.color.yellow));
if (getWindow() != null) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, extColor));
}
} else {
if (getWindow() != null) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.fail_safe));
}
}
}
});
}
你会发现图像中最鲜艳的颜色,你可以改变 getWindow().setStatusBarColor(getResources().getColor(R.color.color));
你必须使用 Palette library 来获得主色:
// Generate palette asynchronously and use it on a different
// thread using onGenerated()
public void changeStatusBarColorAsync(Bitmap bitmap) {
Palette.from(bitmap).generate(new PaletteAsyncListener() {
public void onGenerated(Palette p) {
// Use generated instance
Palette.Swatch vibrant = p.getVibrantSwatch();
int color = ContextCompat.getColor(getContext(),R.color.default_title_background);
if(vibrant != null){
color = vibrantSwatch.getTitleTextColor();
}
getWindow().setStatusBarColor(ContextCompat.getColor(this, color));
}
});
}
我想实现我们在 WhatsApp 中看到的相同功能,当看到一个人的个人资料时,状态栏的颜色会根据 根据图像的颜色。
它叫做 Pallete,使用下面的函数,只需传递您的位图图像即可
private void setUpPalette(Bitmap bitmap) {
// you passed your Bitmap image;
Palette.from(bitmap).
generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
if (palette != null) {
//default color is yellow
// set the color to toolbar, whatever
int extColor = palette.getVibrantColor(ContextCompat.getColor(MainActivity.this, R.color.yellow));
if (getWindow() != null) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, extColor));
}
} else {
if (getWindow() != null) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.fail_safe));
}
}
}
});
}
你会发现图像中最鲜艳的颜色,你可以改变 getWindow().setStatusBarColor(getResources().getColor(R.color.color));
你必须使用 Palette library 来获得主色:
// Generate palette asynchronously and use it on a different
// thread using onGenerated()
public void changeStatusBarColorAsync(Bitmap bitmap) {
Palette.from(bitmap).generate(new PaletteAsyncListener() {
public void onGenerated(Palette p) {
// Use generated instance
Palette.Swatch vibrant = p.getVibrantSwatch();
int color = ContextCompat.getColor(getContext(),R.color.default_title_background);
if(vibrant != null){
color = vibrantSwatch.getTitleTextColor();
}
getWindow().setStatusBarColor(ContextCompat.getColor(this, color));
}
});
}