Canvas.drawText() 究竟如何绘制文本?

8
在这个方法的文档中写道:
x   The x-coordinate of origin for where to draw the text
y   The y-coordinate of origin for where to draw the text

但是它没有说明这个文本是从哪个方向绘制的。我知道这个文本是从原点向上绘制的,但是当我给出以下参数时,我的文本被裁剪了:

canvas.drawText(displayText, 0, canvas.getHeight(), textPaint);

此外,假设我正在使用Align.LEFT(意味着文本绘制在x,y原点的右侧)

那么正确的参数应该是什么(假设我不想使用固定数字)?


也许这就是你正在寻找的(请检查答案评论部分)。https://dev59.com/KWkv5IYBdhLWcg3wbgQx - Master Chief
文字是如何被切割的?有显示任何文本吗? - Barney
如果您尝试将y值设置为canvas.getHeight() / 2,是否会正确显示文本出现在中间?此外,您应该更具体地说明您想要实现什么。 - Barney
getHeight/2 的结果会导致文字被切割,这次是文本的上部被切割,而不是像原来那样是底部被切割。 - Daniel L.
2个回答

5
这是我最终采用的方案:
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (textAlignment == Align.CENTER) {
        canvas.drawText(displayText, canvas.getWidth()/2, canvas.getHeight()-TEXT_PADDING, textPaint);  
    }
    else if (textAlignment == Align.RIGHT) {
        canvas.drawText(displayText, canvas.getWidth()-TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint);   
    }
    else if (textAlignment == Align.LEFT) {
        canvas.drawText(displayText, TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint); 
    }   
    //canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), p);
}

两点注释:

  1. TEXT_PADDING是我在运行时转换为像素的dp维度(在我的情况下为3dp)。
  2. 你可以取消注释最后一行,在你的画布周围画出矩形以进行调试。

1
也许您可以使用以下代码片段来检查它是否正常工作:
int width = this.getMeasuredWidth()/2;
int height = this.getMeasuredHeight()/2;
textPaint.setTextAlign(Align.LEFT);
canvas.drawText(displayText, width, height, textPaint);

在我的情况下,宽度和高度只是任意计算的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接