Android绘制文字时垂直居中

canvas.drawText(String text, float x, float y, Paint paint);

是Android中绘制文本的方法,其中的x代表文字绘制时在X轴的起始点,而y是在Y轴绘制时,文字的 baseline,不是文字的中心点也不是文字的底部。

下面代码根据绘制的Y轴中心点centerY,算出了baseline,top,bottom,ascent和descent

    @Override
protected void onDraw(Canvas canvas) { int top = mPaint.getFontMetricsInt().top;
int bottom = mPaint.getFontMetricsInt().bottom;
int ascent = mPaint.getFontMetricsInt().ascent;
int descent = mPaint.getFontMetricsInt().descent; int baselineY =centerY + (bottom-top)/2 - bottom;
top = baselineY + top;
bottom = baselineY + bottom;
ascent = baselineY + ascent;
descent = baselineY + descent; mPaint.setColor(Color.GREEN);
canvas.drawText(text, 100, baselineY, mPaint);
canvas.drawLine(0, centerY, getMeasuredWidth(), centerY, mPaint); mPaint.setStrokeWidth(2); mPaint.setColor(Color.BLACK);
canvas.drawLine(0, top, getMeasuredWidth(), top, mPaint); mPaint.setColor(Color.YELLOW);
canvas.drawLine(0, ascent, getMeasuredWidth(), ascent, mPaint); mPaint.setColor(Color.RED);
canvas.drawLine(0, baselineY, getMeasuredWidth(), baselineY, mPaint); mPaint.setColor(Color.YELLOW);
canvas.drawLine(0, descent, getMeasuredWidth(), descent, mPaint); mPaint.setColor(Color.BLACK);
canvas.drawLine(0, bottom, getMeasuredWidth(), bottom, mPaint); }
上一篇:检查Linux服务器性能的关键十条命令


下一篇:C++ explicit关键字详解