如何在 Kotlin 中从 text/string 创建可绘制的图标?

How to create an icon drawable from a text/string in Kotlin?

是否可以在 Android(使用 Kotlin)中有问题地将文本“绘制”到 Shape 或 Drawable 以将结果用作 image ImageView?

在 iOS 中,将自定义文本绘制到 UIImageContext 是没有问题的,然后可以用来创建 UIImage ()。 Android 也有类似的东西吗?

您可以制作自己的 Drawable 实现。 Android 绘图是通过 Paint 和 Canvas 完成的。这是一个例子:

class TextIconDrawable: Drawable() {
    private var alpha = 255
    private var textPaint = TextPaint().apply {
        textAlign = Paint.Align.CENTER
    }
    var text by Delegates.observable("") { _, _, _ -> invalidateSelf() }
    var textColor by Delegates.observable(Color.BLACK) { _, _, _ -> invalidateSelf() }

    private fun fitText(width: Int) {
        textPaint.textSize = 48f
        val widthAt48 = textPaint.measureText(text)
        textPaint.textSize = 48f / widthAt48 * width.toFloat()
    }

    override fun draw(canvas: Canvas) {
        val width = bounds.width()
        val height = bounds.height()
        fitText(width)
        textPaint.color = ColorUtils.setAlphaComponent(textColor, alpha)
        canvas.drawText(text, width / 2f, height / 2f, textPaint)
    }

    override fun setAlpha(alpha: Int) {
        this.alpha = alpha
    }

    override fun setColorFilter(colorFilter: ColorFilter?) {
        textPaint.colorFilter = colorFilter
    }

    override fun getOpacity(): Int = PixelFormat.TRANSLUCENT

}

用法:

val drawable = TextIconDrawable().apply {
    text = "Hello, world!"
    textColor = Color.BLACK
}
requireView().findViewById<ImageView>(R.id.imageView).setImageDrawable(drawable)

您当然可以自定义公开哪些属性。或者,如果这是一次性使用的东西,只需在绘画实例上根据需要设置属性即可。