我使用Palette类以编程方式从图像中获取最主要的颜色,然后我想将其用于状态栏和工具栏。根据材料设计指南,状态栏颜色应该比工具栏颜色深两个。
Bitmap bitmap = ((BitmapDrawable) ((ImageView)mImageView).getDrawable()).getBitmap();
if (bitmap != null) {
palette = Palette.generate(bitmap);
vibrantSwatch = palette.getVibrantSwatch();
darkVibrantSwatch = palette.getDarkVibrantSwatch();
}
对于较暗的颜色我使用darkVibrantSwatch,而对于较浅的颜色,我使用的是dynamicSwatch。但在大多数情况下,这些情况彼此非常不同,因此基本上变得无法使用。这有什么解决方法吗? 也许如果它可以只获得一种颜色,比如darkVibrantSwatch,然后以编程方式生成一种浅色调的颜色?
答案 0 :(得分:1)
我不确定是否能获得2个浅色调,但你可以使用SHADE_FACTOR,看看你是否能达到你想要的效果。
private int getDarkerShade(int color) {
return Color.rgb((int)(SHADE_FACTOR * Color.red(color)),
(int)(SHADE_FACTOR * Color.green(color)),
(int)(SHADE_FACTOR * Color.blue(color)));
}
摘自here
的代码段答案 1 :(得分:0)
一种效果很好的方法是修改颜色HSV表示中的亮度值:
import android.graphics.Color;
public static int modifyBrightness(int color, float factor) {
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
hsv[2] *= factor;
return Color.HSVToColor(hsv);
}
要为状态栏获得适当深色的颜色,请使用因子0.8:
int darkerColor = modifyBrightness(color, 0.8);