当我有一个扩展 View 的类时,如何将文本绘制到该 View 的中心?要绘制我正在使用的文本,canvas.drawText
但由于绘制后无法移动文本,我不确定如何将文本居中。那么我将如何在 android 视图类中居中文本
问问题
1157 次
2 回答
3
Paint mPaint = new Paint();
mPaint.setARGB(200, 254, 0, 0); //example
mPaint.setTextAlign(Align.CENTER);
int positionX = (canvas.getWidth() / 2);
int positionY = (int) ((canvas.getHeight() / 2) - ((mPaint.descent() + mPaint.ascent()) / 2)) ;
canvas.drawText("Hello", positionX, positionY, mPaint);
于 2013-03-21T00:43:25.300 回答
2
在精神上,Maver1ck 走在了正确的轨道上,尽管这比实践中要困难一些。您需要设置一个TextPaint
并进行一些测量:
TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
paint.setTextAlign(Paint.Align.CENTER); //Draw text from center
//setup any text size or color attributes
现在,确定如何垂直居中文本。您想以可见文本为中心吗?你想要基线在中心吗?您想基于文本顶部或上升居中吗?文字很复杂。对于简单的情况,假设我们将在字体的底部和顶部之间居中(注意这不是绝对的顶部和底部——这将是上升和下降):
//Do this somewhere where you can cache it -- no need to do this on every draw.
//onSizeChanged() is a good place.
FontMetrics metrics = paint.getFontMetrics();
float height = Math.abs(metrics.top - metrics.bottom);
float x = getWidth() / 2;
float y = (getHeight() / 2) + (height / 2);
然后,在你的onDraw()
:
canvas.drawText("My Text", x, y, paint);
于 2013-03-21T00:50:17.513 回答