android - Canvas.drawText() 是如何真正绘制文本的?

标签 android android-canvas android-custom-view

在此方法文档中写道:

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

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

最佳答案

这是我最终使用的:

@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. 您可以取消注释最后一行以在 Canvas 周围绘制矩形以进行调试。

关于android - Canvas.drawText() 是如何真正绘制文本的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132134/

相关文章:

android - 如何在 ScrollView 中包含多个段落? XML

android - 在对象之间共享实例的最佳实践

Android - 在 Canvas 上淡出位图图像

java - 尝试访问自定义 AlertDialog 的子级会导致 NullPointerException

android - 自定义 ListView(带 CheckBox)不响应点击

android - 如何在用户注册和登录时使用 firebase 将 OTP 代码发送到电子邮件和电话号码

java - Extract.String 为空?没有运气。

android - 当 View 父级具有比例因子时,如何在不放大 Artifact 的情况下绘制到 View Canvas 上?

android - 如何将 sdcard 上的 PNG 图像加载到 Canvas 以在 Android 中绘制?

java - 移动手指时看不到路径