2

例如,如果背景为白色,则文本颜色将为黑色。如果 BG 为黑色,则文本将为白色。蓝色BG、黄色文字等 更新:

// method in MyActivity class
void changeBackgroundColor(int newColor) {
    activityLayout.setBackgroundColor(newColor);
    int invertingColor = ColorInvertor.invert(newColor);
    someTextView.setTextColor(invertingColor);
}

如果我打电话activity.changeBackgroundColor(Color.WHITE),那么someTextView必须将文本颜色更改为黑色,即ColorInvertor.invert(Color.WHITE) == Color.BLACKColorInvertor.invert(Color.BLACK) == Color.WHITE等等。

4

3 回答 3

5

获取颜色的 rgb 值并从 255 中减去它们:

yourColor = Color.rgb(0,130,20);

invertedRed = 255 - 0;
invertedGreen = 255 - 130;
invertedBlue = 255 - 20;

text.setTextColor(Color.rgb(invertedRed,invertedGreen,invertedBlue));

如果要使用十六进制值,请参阅如何从 java 中的十六进制颜色代码获取 RGB 值

于 2013-02-04T14:56:42.153 回答
0

只需使用简单的条件即可:

1.获取颜色

2.检查条件

3.设置颜色

要获得颜色:

TextView tv1;
tv1=(TextView)findViewById(R.id.tv1);
ColorDrawable tv1color = (ColorDrawable) tv1.getBackground();

如果您使用的是 Android 3.0+,则可以获取颜色的资源 ID:

int tv1colorId = tv1color.getColor();

要设置颜色:

TextView tv2;
tv2=(TextView)findViewById(R.id.tv2);
tv2.setBackgroundColor(0xFF00FF00);

然后根据需要设置条件:

if (tv1colorID == R.color.green) {
   tv2.setBackgroundColor(color.WHITE); // As your choice color
}
于 2013-02-04T13:01:34.113 回答
0

您可以使用这些功能反转颜色...

//color
public static String getHex(int intColor) {
    String hexColor = String.format("#%06X", (0xFFFFFF & intColor));
    return hexColor;
}

public static String getRGBStringfromHex(String hexColor) {
    int color = Color.parseColor(hexColor);
    int red = Color.red(color);
    int green = Color.green(color);
    int blue = Color.blue(color);
    return red + "," + green + "," + blue;
}

public static int[] getRGBStringtoRGBInt(String splits[]) {
    int list[] = new int[3];
    list[0]=Integer.parseInt(splits[0]);
    list[1]=Integer.parseInt(splits[1]);
    list[2]=Integer.parseInt(splits[2]);
    return list;
}

public static int getRGBColor(int rgb[]) {
    int color = Color.rgb(rgb[0],rgb[1],rgb[2]);
    return color;
}

public static String invertedRGBfromRGB(int rgb[]) {
    int invertedRed = 255 - rgb[0];
    int invertedGreen = 255 - rgb[1];
    int invertedBlue = 255 - rgb[2];
    return invertedRed + "," + invertedGreen + "," + invertedBlue;
}

public static int getColorFromRGBString(String color) {
    ArrayList<Integer> list = new ArrayList<>();
    String splits[] = color.split(Pattern.quote(","));
    list.add(Integer.parseInt(splits[0]));
    list.add(Integer.parseInt(splits[1]));
    list.add(Integer.parseInt(splits[2]));
    return Color.rgb(list.get(0), list.get(1), list.get(2));
}

Ok now if you convert a int color...

String rgb[]=getRGBStringfromHex(getHex(colorThatWanttoInvert)).split(",");
int desireinvertedcolor=getColorFromRGBString(invertedRGBfromRGB(getRGBStringtoRGBInt(rgb)));

Hope this will help.

于 2020-03-06T18:35:47.830 回答