kotlin两个颜色的中间色值

102 阅读1分钟
object ColorUtils {
    /**
     * 计算两个颜色的渐变中心值(支持百分比权重)
     * @param color1 第一个颜色值(如 "#A6B1C5")
     * @param color2 第二个颜色值(如 "#66768F")
     * @param percentage 权重百分比(如 "50%" 表示中间值,"30%" 表示偏向color1)
     * @return 渐变中心值的十六进制颜色字符串
     */
    fun calculateGradientCenter(
        color1: String,
        color2: String,
        percentage: String
    ): String {
        // 解析颜色值
        val c1 = Color.parseColor(color2)
        val c2 = Color.parseColor(color1)

        // 解析百分比权重(0.0-1.0)
        val weight = percentage.removeSuffix("%").toDouble() / 100.0

        // 计算RGB通道的加权平均值
        val red = (Color.red(c1) * weight + Color.red(c2) * (1 - weight)).toInt()
        val green = (Color.green(c1) * weight + Color.green(c2) * (1 - weight)).toInt()
        val blue = (Color.blue(c1) * weight + Color.blue(c2) * (1 - weight)).toInt()

        // 组合新颜色并格式化输出
        return String.format("#%02X%02X%02X", red, green, blue).toUpperCase()
    }
}
val result1 = ColorUtils.calculateGradientCenter(
    "#000000",
    "#FFFFFF",
    "50%"
) // 输出:#7F7F7F  
//这里注意 0 + (255 - 0) / 2 = 127.5  如果不四舍五入就是#7F7F7F 四舍五入就是#808080