Android一键设置TextView透明度

2,238 阅读2分钟

背景

在平时做页面开发的时候,经常会遇到UI设计图画了一行文字,然后给了一个色值类似 #565D66,然后给了一个透明度80%。然后你看到会说:好烦,不能给一个能直接使用的色值吗?然后开始了和UI老师的深度交流去了。

一般实现

然后你经过百度,找到了一张16进制色值对照表,默默添加了两位透明度,然后又遇到一个TextView,然后又搜了一下表,默默修改了色值......心情不是很美丽了

放大招

首先说明一下Android里面色值代表的含义

Android中的颜色值通常遵循RGB/ARGB标准,使用时通常以#字符开头,以16进制表示。 其中RGB依次代表红色(Red)、绿色(Green)、蓝色(Blue). ARGB依次代表透明度(Alpha)、红色(Red)、绿色(Green)、蓝色(Blue)
eg:#FF00CC99其中FF是透明度,00是红色值,CC是绿色值,99是蓝色值

上代码:

object AlphaConvertUtil {

    /**
     * 颜色和透明度的转换
     */
    fun colorAlphaConvert(alpha: Float, color: Int): Int {
        // 根据百分比计算出透明度值
        val alphaInt: Int = (alpha * 0xff).toInt()
        // 转换为16进制透明度
        val alphaFinal = alphaInt shl 24 or 0x00ffffff
        return color and alphaFinal
    }

    /**
     * 颜色和透明度的转换
     */
    fun colorAlphaConvert(alpha: Float, textView: TextView) {
        // 根据百分比计算出透明度值
        val alphaInt: Int = (alpha * 0xff).toInt()
        // 转换为16进制透明度
        val alphaFinal = alphaInt shl 24 or 0x00ffffff
        val color = textView.currentTextColor
        textView.setTextColor(color and alphaFinal)
    }
}

原理讲解

我们通过代码进行转换

  1. 首先通过textView.currentTextColor拿到view直接设置的色值
  2. 前两位表示透明度,按照百分比计算出实际的透明度值 比如80%的透明度 0.8 * 0xff = 0xcc
  3. 进行移位运算 0xcc左移24位得到0xcc000000,然后与0x00ffffff进行运算,得到0xccffffff
  4. 最后将上一步的结果与真正的色值进行运算,修改前两位,得到最终的色值,然后设置一下就好了

核心思想

拿到当前色值,手动转换前两位透明度,然后在设置进去。中间了为了提高转换效率进行一些位运算