有时候做项目的时候,需要动态的计算两颜色值之间的中间值,然后做出一定的效果,那么该怎么求呢?
下面说说做法:
简单而言,就是需要对两颜色之间的求和再取平均值,但是直接使用color.parseInt再求和除2是不对的,因为直接求和会导致颜色不对,具体原因出自相加求和颜色退位。
那么,该如何算呢,贴下代码:
public static String getMiddleColor(String color1, String color2) { if (color1.contains("#") && color2.contains("#") && color1.length() == color2.length() && color2.length() == 7) { String tempColor1 = color1.replace("#", ""); String tempColor2 = color2.replace("#", ""); StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("#"); for (int i = 0; i < tempColor1.length(); i++) { String tempResult = (changeHex2Int(String.valueOf(tempColor1.charAt(i))) + changeHex2Int(String.valueOf(tempColor2.charAt(i)))) / 2 + ""; stringBuffer.append(changeInt2Hex(tempResult)); } return stringBuffer.toString(); } return ""; }简单的说就是根据6位的颜色直接逐个逐个的求和再除二,那么这个颜色值就是对的了。
private static int changeHex2Int(String temp) { BigInteger srch = new BigInteger(temp, 16); return Integer.valueOf(srch.toString()); } private static String changeInt2Hex(String temp) { BigInteger srch = new BigInteger(temp, 10); return Integer.toHexString(Integer.parseInt(srch.toString())); }如此一来,就能实现一个比较困难的需求,用曲线救国的方式实现我们的功能要求了。
感谢你的浏览。