如何在画布中垂直居中文本

3

我使用Align.CENTER水平居中了一段文字,但它并没有将文字垂直居中。

paint.setTextAlign(Align.CENTER);
canvas.drawText(text, fx, fy, paint);

如何垂直居中文本?

2个回答

2
 StaticLayout yourLayout = new StaticLayout(text, mTextPaint,
            canvas.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f,
            false);
 canvas.translate((canvas.getWidth() / 2) - (yourLayout.getWidth() / 2), (canvas.getHeight() / 2) - ((yourLayout.getHeight() / 2)));

This work for me.


谢谢你的帮助。我正在添加大量文本,所以我猜它不够高效。 - mcfly soft
1
在onDraw之前创建一个名为yourLayout的StaticLayout,并将其作为字段,在无论文本数量多少的情况下均进行刷新。您可以随时更新布局并使其无效。代码如下:StaticLayout yourLayout = new StaticLayout(text, mTextPaint,canvas.getWidth(),Alignment.ALIGN_NORMAL, 1.0f, 0.0f,false);请在您的代码中实现以上逻辑。 - SanthoshKumar SrikanthaMurali

1

Align.CENTER 是用于水平对齐的。如果您想要垂直居中,您需要找到文本的最大高度,然后通过使用 canvas.translate 垂直平移来在画布上垂直定位。


谢谢,我担心这个问题,我会尝试解决。 - mcfly soft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接