获得两种颜色之间的中间色

时间:2014-07-23 12:16:36

标签: java android colors gradient median

我有两种颜色的字符串表示形式(例如:“#FFFFFF”和“#000000”),我正在寻找一种以编程方式获取这两种颜色的中间颜色的方法。我称之为“中位数”的颜色将是在中心遇到这两个颜色的颜色。

我需要这个才能分两步绘制渐变:

  • 从第一种颜色到中值
  • 的1个渐变
  • 从中位数到第二种颜色的1个渐变

因此它看起来像从第一种颜色到第二种颜色的1个渐变,这是我无法做到的。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

你可以试试这个:

new ArgbEvaluator().evaluate(0.5, 0xffffff, 0x000000);

更多信息: http://developer.android.com/reference/android/animation/ArgbEvaluator.html

答案 1 :(得分:2)

我会分别处理每个RGB组件。您可以使用Long.valueOf()将十六进制解析为数字。平均你的两个值(根据需要进行舍入),然后使用Long.toString()填充到两位数返回十六进制。

我测试过的一些示例代码:

     String colour1 = "#FFFFFF";
     String colour2 = "#000000";

     StringBuilder result = new StringBuilder("#");
     for (int i=0;i<3;i++) {
         String h1 = colour1.substring(i*2+1, 3+(i*2));
         String h2 = colour2.substring(i*2+1, 3+(i*2));

         long l1 = Long.parseLong(h1, 16);
         long l2 = Long.parseLong(h2, 16);

         long mid = (l1 + l2) / 2; //truncating not rounding

         String midStr = Long.toString(mid, 16);
         if (midStr.length() == 1) {
             result.append("0");
         }
         result.append(midStr.toUpperCase());

     }