Nic*_*ick 5 java graphics android canvas
我正在使用 drawTextOnPath() 在画布上显示一些文本,我需要知道正在绘制的文本的尺寸。我知道这对于由多个线段、曲线等组成的路径是不可行的,但我的路径是完全水平的单个线段。我正在使用 Paint.getTextBounds() 获取一个具有我想要绘制的文本尺寸的矩形。
当我在任意位置绘制文本时,我使用此矩形在文本周围绘制边界框。
这是一些反映我当前正在做的事情的简化代码:
// to keep this example simple, always at origin (0,0)
public drawBoundedText(Canvas canvas, String text, Paint paint) {
Rect textDims = new Rect();
paint.getTextBounds(text,0, text.length(), textDims);
float hOffset = 0;
float vOffset = paint.getFontMetrics().descent; // vertically centers text
float startX = textDims.left; / 0
float startY = textDims.bottom;
float endX = textDims.right;
float endY = textDims.bottom;
path.moveTo(startX, startY);
path.lineTo(endX, endY);
path.close();
// draw the text
canvas.drawTextOnPath(text, path, 0, vOffset, paint);
// draw bounding box
canvas.drawRect(textDims, paint);
}
Run Code Online (Sandbox Code Playgroud)
结果很接近,但并不完美。如果我将倒数第二行替换为:
canvas.drawText(text, startX, startY - vOffset, paint);
Run Code Online (Sandbox Code Playgroud)
然后就可以完美运行了。通常右边缘和下边缘有 1-3 个像素的间隙。该错误似乎也随着字体大小的变化而变化。有任何想法吗?我可能做的一切都是正确的,问题出在drawTextOnPath(); 沿路径绘制时,即使路径是水平的,文本质量也会明显下降,这可能是由于插值算法或其在幕后使用的任何内容所致。如果发现尺寸抖动也来自那里,我不会感到惊讶。
我找到了一个适合我的特定情况的解决方案,尽管它并没有真正解决最初的问题。
由于我的特定用例仅沿着单段直线路径绘制文本,因此我能够一起摆脱路径并使用 Canvas.drawText() 以及 Canvas.translate() 和 canvas.rotate() 。这消除了我在沿着路径绘制时看到的文本大小随机性和丑陋。
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |