如何动态更改颜色阴影?

时间:2015-04-25 18:20:03

标签: android android-5.0-lollipop material-design palette

我使用Palette类以编程方式从图像中获取最主要的颜色,然后我想将其用于状态栏和工具栏。根据材料设计指南,状态栏颜色应该比工具栏颜色深两个。

  Bitmap bitmap = ((BitmapDrawable) ((ImageView)mImageView).getDrawable()).getBitmap();
    if (bitmap != null) {
        palette = Palette.generate(bitmap);
        vibrantSwatch = palette.getVibrantSwatch();
        darkVibrantSwatch = palette.getDarkVibrantSwatch();
    }

对于较暗的颜色我使用darkVibrantSwatch,而对于较浅的颜色,我使用的是dynamicSwatch。但在大多数情况下,这些情况彼此非常不同,因此基本上变得无法使用。这有什么解决方法吗? 也许如果它可以只获得一种颜色,比如darkVibrantSwatch,然后以编程方式生成一种浅色调的颜色?

2 个答案:

答案 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);