【发布时间】:2018-04-13 00:19:15
【问题描述】:
我正在尝试将数字网格绘制到画布中。
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 标志来解决文本脱节问题,有趣的是,当我设置paints 标志stroughText
isStrikeThruText = true
我得到以下结果:
这个,我相信这表明坐标设置正确,但由于字体大小,绘制配置可能存在一些问题。
【问题讨论】:
-
你应该看看这个帖子stackoverflow.com/questions/11120392/…。正如回答的那样,文本的基线被放置在你给它的坐标上,这使它位于单元格的中心之上。要真正使文本居中,您应该根据文本大小在 Y 坐标上添加更多内容。
-
谢谢,我遇到过这个解决方案,但它并没有解决脱节和垂直偏移问题,事实上即使在 x 轴上问题仍然存在
-
问题可能出在 x 和 y 计算上。您应该在计算 x 和 y 的位置添加代码。
-
Paint#getTextWidths(String text, float[] widths)在widths数组中返回什么?Log.d该数组的内容 -
所以
Paint#measureText()返回 4? 4 = 1 + 2 + 1