Android设置文字颜色渐变

项目中用到了很多文字颜色渐变的设计,因此做一下记录。

核心代码如下:

/**
 * 统一文字渐变色设置
 * @param colors 渐变色字符串数组
 * @param positions 渐变色位置数组,可为空
 * @param start 渐变起始点,可为空
 * @param end 渐变结束点,可为空
 * @param tile 渐变模式,默认为CLAMP
 */
fun TextView.setGradientColor(
    colors: Array<String>,
    positions: FloatArray? = null,
    start: PointF? = null,
    end: PointF? = null,
    tile: Shader.TileMode = Shader.TileMode.CLAMP
) {
    post {
        val intColors = colors.map {
            Color.parseColor(it)
        }.toIntArray()
        val gradient = LinearGradient(
            start?.x ?: paddingStart.toFloat(),
            start?.y ?: 0F,
            end?.x ?: measuredWidth.toFloat() - paddingEnd,
            end?.y ?: 0F,
            intColors,
            positions,
            tile
        )
        paint.shader = gradient
        invalidate()
    }
}

对应的xml中TextView如下:

  <androidx.appcompat.widget.AppCompatTextView
  	  android:id="@+id/tvHello"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World"
      android:textColor="#FFC791"
      android:textSize="16dp"
      android:textStyle="bold"/>

如何使用:

 tvHello.setGradientColor(arrayOf("#FFECC6", "#FFC791"))

特别注意:必须设置android:textColor属性颜色值,否则不会产生预期效果

感谢大家的支持,如有错误请指正,如需转载请标明原文出处!

你可能感兴趣的:(Android,android,kotlin)