我正在尝试将数字网格绘制到画布中。
val textX = x * TILE_SIZE + TILE_SIZE / 2f
val textY = y * TILE_SIZE + TILE_SIZE / 2f
canvas.drawText(number.toString(), textX, textY, textPaint)
这是我的画作
private val textPaint: Paint by lazy {
Paint().apply {
isAntiAlias = false
color = Color.WHITE
textSize = TILE_SIZE * 0.1f
textAlign = Paint.Align.CENTER
style = Paint.Style.FILL
}
}
但是画布一直在分离我的文本并将其与非常规网格对齐。我仔细检查了我的位置值。有什么我想念的吗?
编辑:我知道我已将对齐设置为CENTER,但如果您注意到,第4行中的文本在上一行中具有更高的偏移量
我能够通过添加subPixelText标志解决文本脱节问题,有趣的是,当我设置paint标志strikeThroughText时
isStrikeThruText = true
我得到以下结果:
我相信这表明坐标设置正确,但由于字体大小,可能会出现涂料配置问题。
答案 0 :(得分:0)
我设法解决了两个不同的问题:
文字脱节 - 这是因为文字非常小,结果是单个字母有时会占用太多空间并转移下一个字母。解决方法是更改paint subpixelText属性:
isSubpixelText = true
文字错位 - 在查看Paint.FontMetrics之后我意识到ascent
和descent
值是字体设置的推荐值,因此只能在指定的颜色内更改字体。我只需切换到另一种字体就解决了这个问题。
修改:我最终使用StaticLayout,更多关于主题here