在创建自定义视图时使用 canvas.drawText()

Using the canvas.drawText() while creating a Custom View

我正在创建一个自定义视图,我必须在 canvas 上的特定位置绘制文本。为了使用 canvas.drawText(),我们必须创建一个绘画对象,该对象必须在调用 drawText() 时作为参数传递。如果我想让文本呈现为居中对齐,我在制作绘画对象时使用 setTextAlign() 调用。

    statPaint.setTextAlign(Paint.Align.CENTER);

另外调用drawText()时,需要设置渲染文本的起点,如下图

    canvas.drawText(stat1,paddingLeft,paddingTop,statPaint);

paddingLeft 和 paddingTop 告诉 drawText() 从哪里绘制文本。函数调用必须传递这两个参数。但我仍然无法让文本居中对齐。如何使此文本居中对齐。

此外,如果我想在同一行中获得两个不同的文本,第一个在屏幕的前半部分居中对齐,第二个文本在屏幕的后半部分居中对齐,怎么办我这样做?屏幕被垂直分成两半。

提前致谢。

以下是如何在任何矩形中居中文本(只需更改 left/right/top/bottom)

// Allocated once as a member var, not in each onDraw
private Rect rect = new Rect();

// Inside onDraw
int left = 0;
int right = getWidth();
int top = 0;
int bottom = getHeight();

paint.getTextBounds(text, 0, text.length(), rect);
FontMetrics fm = paint.getFontMetrics();

float x = left + (right - left - rect.width()) / 2; 
float y = top + (bottom - top) / 2 - (fm.descent + fm.ascent) / 2; 
canvas.drawText(text, x, y, paint);