【问题标题】:How Canvas.drawText() really draws the text?Canvas.drawText() 如何真正绘制文本?
【发布时间】:2013-02-28 09:40:59
【问题描述】:

在这个方法文档中是这样写的:

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 原点的右侧)

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

【问题讨论】:

  • 也许这就是你要找的东西(检查答案的评论)。 stackoverflow.com/questions/10606410/…
  • 文本是如何被剪切的?是否显示任何文字?
  • 如果您尝试将 y 值设置为 canvas.getHeight() / 2,它是否正确显示出现在中间的文本?另外,你应该更具体地说出你想要完成的事情。
  • getHeight/2 也会导致文本被剪切,这次剪切的是文本的上半部分,而不是原始情况下的下半部分。

标签: android android-canvas android-custom-view


【解决方案1】:

这是我最终使用的:

@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);
}

两个cmets:

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

【讨论】:

    【解决方案2】:

    也许您可以使用以下 sn-p 来查看它是否工作:

    int width = this.getMeasuredWidth()/2;
    int height = this.getMeasuredHeight()/2;
    textPaint.setTextAlign(Align.LEFT);
    canvas.drawText(displayText, width, height, textPaint);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2011-01-16
      • 1970-01-01
      • 2013-07-03
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多