在 Jetpack Compose 中使用修改器在文本上绘制形状

Max*_*hel 2 text blur draw android-jetpack-compose

我正在尝试使用 Jetpack Compose 来混淆一些文本。显然,blur如果您使用的是 Android 12,则该修改器对于此用例会产生奇迹。

对于运行较低 API 版本的设备,我的替代方案是简单地在文本上绘制一个黑色的矩形。graphicsLayer我认为使用现有的修饰符(例如or )这会相对容易,drawBehind但我一直无法弄清楚,而且我现在不知道该怎么办......

我当前的文本可组合项如下所示:

Text(
    modifier = if (blurText) {
        Modifier.blur(16.dp, BlurredEdgeTreatment.Unbounded)
    } else {
        Modifier
    },
    text = textToObfuscate,
    fontFamily = latoFontFamily,
    fontWeight = FontWeight.W700,
    fontSize = 16.sp,
    color = black,
)
Run Code Online (Sandbox Code Playgroud)

我可以将文本包装在一个框中,然后在其中放置另一个框来绘制文本,但这似乎毫无用处,而且比必要的工作量更多。

如果有人对如何仅使用修改器扩展来实现这一目标有任何想法,那就太棒了!

Thr*_*ian 5

您可以Modifier.drawWithContent用作

Text(
    modifier = if (blurText) {
        Modifier.blur(16.dp, BlurredEdgeTreatment.Unbounded)
    } else {
        Modifier.drawWithContent {
            drawContent()
            drawRect(Color.Black)
        }
    },
    text = "textToObfuscate",
    fontWeight = FontWeight.W700,
    fontSize = 16.sp,
)
Run Code Online (Sandbox Code Playgroud)