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

Android 创建自定义视图时使用canvas.drawText(),android,canvas,paint,android-custom-view,drawtext,Android,Canvas,Paint,Android Custom View,Drawtext,我正在创建一个自定义视图,在该视图中,我必须在画布上的特定位置绘制文本。为了使用canvas.drawText(),我们必须创建一个paint对象,在调用drawText()时,该对象必须作为参数传递。如果希望将文本渲染为中心对齐,则在生成paint对象时使用setTextAlign()调用 statPaint.setTextAlign(Paint.Align.CENTER); 另外,在调用drawText()时,需要设置要呈现的文本的起点,如下所示 canvas.drawTe

我正在创建一个自定义视图,在该视图中,我必须在画布上的特定位置绘制文本。为了使用canvas.drawText(),我们必须创建一个paint对象,在调用drawText()时,该对象必须作为参数传递。如果希望将文本渲染为中心对齐,则在生成paint对象时使用setTextAlign()调用

    statPaint.setTextAlign(Paint.Align.CENTER);
另外,在调用drawText()时,需要设置要呈现的文本的起点,如下所示

    canvas.drawText(stat1,paddingLeft,paddingTop,statPaint);
paddingLeft和paddingTop告诉drawText()从何处绘制文本。传递这两个参数对于函数调用是必需的。但我仍然无法将文本集中对齐。如何使此文本居中对齐

另外,如果我想在同一行中获得两个不同的文本,第一个文本在屏幕的上半部分居中对齐,第二个文本在屏幕的下半部分居中对齐,我该怎么做?屏幕垂直分为两半


提前感谢。

以下是如何在任何矩形中居中显示文本(只需更改左/右/上/下)


将值初始化为矩形是否为文本要在其中居中对齐的矩形的边界?getTextBounds()的作用是什么?你能解释一下最后三行的作用吗?在调试时,x和y的值是1.0和1.22,因此存在一些问题。我对rect的输入是left=0,top=378,right=540,bottom=432。我得到的x和y分别为1.0和1.22。请确保为绘制设置了文本大小,并且文本字符串不是空的
// 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);