Jetpack Compose draw text 笔记

Posted aikongmeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jetpack Compose draw text 笔记相关的知识,希望对你有一定的参考价值。

DrawScope.kt 看提供了众多的drawXXX, 而唯独没有看到drawText, 这不是坑爹吗

DrawScope 看到 val drawContext: DrawContext
DrawContext.kt

package androidx.compose.ui.graphics.drawscope

import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Canvas
interface DrawContext {

    /**
     * The current size of the drawing environment
     */
    var size: Size

    /**
     * The target canvas to issue drawing commands
     */
    val canvas: Canvas

    /**
     * The controller for issuing transformations to the drawing environment
     */
    val transform: DrawTransform
}

这个canvas 看着眼熟,


这个 compose 包下的 canvas interface 也没有 drawText , 不过 他含有一个 NativeCanvas

/**
 * Return an instance of the native primitive that implements the Canvas interface
 */
expect val Canvas.nativeCanvas: NativeCanvas

而 NativeCanvas 则是我们常用的canvas 的别名

actual typealias NativeCanvas = android.graphics.Canvas

写的Test ,实践一下.可行

@Composable
fun CanvasText() {
    Canvas(modifier = Modifier.fillMaxSize(), onDraw = {
        val nativePaint = android.graphics.Paint().let {
            it.apply {
                textSize = 36f
                color = android.graphics.Color.RED
            }
        }
        drawContext.canvas.nativeCanvas.drawText(
            "Jetpack Compose Draw Text",
            18f,
            size.height / 2f,
            nativePaint
        )
    })
}

另外, DrawScope 发现一个canvas 相关的内联方法,也是调用 drawContext.canvas ,所以这个方法也是可以直接.nativeCanvas 效果跟上面相通.

inline fun DrawScope.drawIntoCanvas(block: (Canvas) -> Unit) = block(drawContext.canvas)

一句话, 总结:
可在compose 包下的canvas ,.nativeCanvas 使用 之前的方法.

以上是关于Jetpack Compose draw text 笔记的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose - Modifier入门篇

Jetpack Compose 基础介绍

Jetpack Compose 基础介绍

Jetpack Compose 基础介绍

Jetpack Compose 基础介绍

Jetpack Compose 基础介绍