当我有一个扩展View的类时,我如何才能将文本绘制到该View的中心?要绘制文本,我使用的是canvas.drawText,但由于绘制后无法移动文本,我不确定如何将此文本居中。那么如何在android视图类中居中显示文本呢?
发布于 2013-03-21 08:50:18
在精神上,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-21 08:43:25
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);https://stackoverflow.com/questions/15537420
复制相似问题