防止画布分离绘制的文本

时间:2018-04-12 12:53:08

标签: android canvas text

我正在尝试将数字网格绘制到画布中。

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
    }
}

但是画布一直在分离我的文本并将其与非常规网格对齐。我仔细检查了我的位置值。有什么我想念的吗?

enter image description here

编辑:我知道我已将对齐设置为CENTER,但如果您注意到,第4行中的文本在上一行中具有更高的偏移量

我能够通过添加subPixelText标志解决文本脱节问题,有趣的是,当我设置paint标志strikeThroughText时

isStrikeThruText = true

我得到以下结果:

enter image description here

我相信这表明坐标设置正确,但由于字体大小,可能会出现涂料配置问题。

1 个答案:

答案 0 :(得分:0)

我设法解决了两个不同的问题:

  1. 文字脱节 - 这是因为文字非常小,结果是单个字母有时会占用太多空间并转移下一个字母。解决方法是更改​​paint subpixelText属性:

    isSubpixelText = true
    
  2. 文字错位 - 在查看Paint.FontMetrics之后我意识到ascentdescent值是字体设置的推荐值,因此只能在指定的颜色内更改字体。我只需切换到另一种字体就解决了这个问题。

  3. 修改:我最终使用StaticLayout,更多关于主题here