目标:纯 Canvas 上的 Android >= 1.6。
假设我想写一个函数来绘制一个(宽度,高度)大的红色矩形,然后在里面绘制一个黑色的 Hello World 文本。我希望文本在视觉上位于矩形的中心。所以让我们试试:
void drawHelloRectangle(Canvas c, int topLeftX,
int topLeftY, int width, int height) {
Paint mPaint = new Paint();
// height of 'Hello World'; height*0.7 looks good
int fontHeight = (int)(height*0.7);
mPaint.setColor(COLOR_RED);
mPaint.setStyle(Style.FILL);
c.drawRect( topLeftX, topLeftY, topLeftX+width, topLeftY+height, mPaint);
mPaint.setTextSize(fontHeight);
mPaint.setColor(COLOR_BLACK);
mPaint.setTextAlign(Align.CENTER);
c.drawText( "Hello World", topLeftX+width/2, ????, mPaint);
}
现在我不知道在标记为 ????
的 drawText 参数中放入什么,即我不知道如何垂直对齐文本。
就像是
??? = topLeftY + height/2 + fontHeight/2 - fontHeight/8;
似乎工作或多或少没问题,但必须有更好的方法。
原文由 Leszek 发布,翻译遵循 CC BY-SA 4.0 许可协议
以
cx
和cy
为中心的示例:为什么
height()/2f
不一样?exactCentre()
=(top + bottom) / 2f
。height()/2f
=(bottom - top) / 2f
这些只会在
top
是0
时产生相同的结果。这可能适用于所有尺寸的某些字体,或某些尺寸的其他字体,但不是所有尺寸的所有字体。