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属性颜色值,否则不会产生预期效果
感谢大家的支持,如有错误请指正,如需转载请标明原文出处!