Dmy*_*nko 10 android kotlin android-jetpack-compose
无法弄清楚如何使用 Jetpack Compose 中的修饰符向带有内部阴影的文本添加渐变。有这样的事情?有任何想法吗?
小智 17
在 Jetpack Compose 1.2.0-beta01中添加了文本渐变。
例子:
@Composable
fun BrushDemo() {
Text(
"Brush is awesome\nBrush is awesome\nBrush is awesome",
style = TextStyle(
brush = Brush.linearGradient(
colors = RainbowColors,
tileMode = TileMode.Mirror
),
fontSize = 30.sp
)
)
}
Run Code Online (Sandbox Code Playgroud)
更多示例请参见此处。
neb*_*hie 16
刚刚遇到了相同的用例,但只是为了文本上的简单渐变。将其发布在这里以防对某人有帮助。
对我有用的是绘制内容,然后通过(从Slack 上的这个Modifier.graphicsLayer答案推断)绘制渐变:
Text(
text = "$ 20",
/** size/font style, etc. **/
modifier = Modifier.graphicsLayer(alpha = 0.99f)
.drawWithCache {
val brush = Brush.horizontalGradient(listOf(StartColor, EndColor))
onDrawWithContent {
drawContent()
drawRect(brush, blendMode = BlendMode.SrcAtop)
}
}
)
Run Code Online (Sandbox Code Playgroud)
我最终将其设为Modifier可重用:
fun Modifier.textBrush(brush: Brush) = this
.graphicsLayer(alpha = 0.99f)
.drawWithCache {
onDrawWithContent {
drawContent()
drawRect(brush, blendMode = BlendMode.SrcAtop)
}
}
Run Code Online (Sandbox Code Playgroud)
结果示例:
Vas*_*iyT 12
到目前为止,jetpack compose 没有提供开箱即用的文本渐变和内部阴影。因此需要自己绘制:

@Composable
fun drawGradientText(name: String, modifier: Modifier = Modifier) {
val paint = Paint().asFrameworkPaint()
val gradientShader: Shader = LinearGradientShader(
from = Offset(0f, 0f),
to = Offset(0f, 400f),
listOf(Color.Blue, Color.Cyan)
)
Canvas(modifier.fillMaxSize()) {
paint.apply {
isAntiAlias = true
textSize = 400f
typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
style = android.graphics.Paint.Style.FILL
color = android.graphics.Color.parseColor("#cdcdcd")
xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_OVER)
maskFilter = BlurMaskFilter(30f, Blur.NORMAL)
}
drawIntoCanvas { canvas ->
canvas.save()
canvas.nativeCanvas.translate(2f, 5f)
canvas.nativeCanvas.drawText(name, 0f, 400f, paint)
canvas.restore()
paint.shader = gradientShader
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
paint.maskFilter = null
canvas.nativeCanvas.drawText(name, 0f, 400f, paint)
canvas.nativeCanvas.translate(2f, 5f)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_OVER)
paint.maskFilter = BlurMaskFilter(30f, Blur.NORMAL)
canvas.nativeCanvas.drawText(name, 0f, 400f, paint)
}
paint.reset()
}
}
Run Code Online (Sandbox Code Playgroud)
您可以调整 PorterDuff 模式和偏移以满足您的要求。
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |