2017-07-15 88 views
0

我有一種方法將父級的文本和圖像色調設置爲某種顏色。現在,如果父母和前景的背景(我是設置的色調)相近,則文本將不可讀。找到兩種顏色之間的對比差異

我該如何檢查這兩種顏色之間的差異,並將其改變(使其變得更亮或更暗)直至它們變得可讀?

下面是我得到了什麼至今:

public static void invokeContrastSafety(ViewGroup parent, int tint, boolean shouldPreserveForeground) { 
    Drawable background = parent.getBackground(); 
    if (background instanceof ColorDrawable) { 
     if (isColorDark(((ColorDrawable) background).getColor())) { 
      // Parent background is dark 

      if (isColorDark(tint)) { 
       // Tint (foreground) color is also dark. 
       if (shouldPreserveForeground) { 
        // We can't modify tint color, changing background to make things readable. 


       } else { 
        // Altering foreground to make things readable 

       } 

       invokeInternal(parent, tint); 
      } else { 
       // Everything is readable. Just pass it on. 
       invokeInternal(parent, tint); 
      } 

     } else { 
      // Parent background is light 

      if (!isColorDark(tint)) { 
       if (shouldPreserveForeground) { 

       } else { 

       } 
      } else { 
       invokeInternal(parent, tint); 
      } 
     } 
    } 
} 

private static boolean isColorDark(int color){ 
    double darkness = 1-(0.299* Color.red(color) + 0.587*Color.green(color) + 0.114*Color.blue(color))/255; 
    return darkness >= 0.2; 
} 
+0

看到我的答案希望這會幫助你。 –

+0

可能重複[公式來確定RGB顏色的亮度](https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color) – geza

回答

0

試試這個工作對我來說。這個函數返回顏色是黑色或者淺色的。

public static boolean isBrightColor(int color) { 
    if (android.R.color.transparent == color) 
     return true; 

    boolean rtnValue = false; 

    int[] rgb = { Color.red(color), Color.green(color), Color.blue(color) }; 

    int brightness = (int) Math.sqrt(rgb[0] * rgb[0] * .241 + rgb[1] 
      * rgb[1] * .691 + rgb[2] * rgb[2] * .068); 

    // Color is Light 
    if (brightness >= 200) { 
     rtnValue = true; 
    } 
    return rtnValue; 
} 

如果需要,您可以在此功能中更改自定義邏輯。

+0

我不好的不加'isColorDark( )'片段中的''功能。我已經知道如何檢查。 –

+0

那問題是什麼? –

+0

我爲邏輯留下了空白區域,使顏色變暗或變淺,直到它在給定的背景顏色上易於閱讀。 –

相關問題