Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算渲染文本字符串的尺寸(在渲染之前) 我想把一个字符串“强”>画布对齐在中间。如果我有这样的代码 Paint p = new Paint(); Canvas c = holder.lockCanvas(); String centered_text = "Hello World";_Java_String_Canvas_Paint - Fatal编程技术网

Java 计算渲染文本字符串的尺寸(在渲染之前) 我想把一个字符串“强”>画布对齐在中间。如果我有这样的代码 Paint p = new Paint(); Canvas c = holder.lockCanvas(); String centered_text = "Hello World";

Java 计算渲染文本字符串的尺寸(在渲染之前) 我想把一个字符串“强”>画布对齐在中间。如果我有这样的代码 Paint p = new Paint(); Canvas c = holder.lockCanvas(); String centered_text = "Hello World";,java,string,canvas,paint,Java,String,Canvas,Paint,然后设置我的绘画风格和大小 p.setTextSize(35); p.setStyle(Style.STROKE); 现在在中间画我的线,我会做< /P> c.drawText(centered_text, c.getWidth()/2, c.getHeight()/2, p); 但这实际上不会使我的文本居中,它会把左上角放在中间。为了使它居中,我需要知道字符串的宽度和高度,以像素为单位,而不是以字符为单位 int string_width = centered_text.getWidth(

然后设置我的绘画风格大小

p.setTextSize(35);
p.setStyle(Style.STROKE);
现在在中间画我的线,我会做< /P>
c.drawText(centered_text, c.getWidth()/2, c.getHeight()/2, p);
但这实际上不会使我的文本居中,它会把左上角放在中间。为了使它居中,我需要知道字符串的宽度和高度,以像素为单位,而不是以字符为单位

int string_width = centered_text.getWidth(); //String.getWidth() is not a real methode
int string_height = centered_text.getHeight(); //String.getHeight() is not a real methode

c.drawText(centered_text, (c.getWidth()/2)-(string_width/2), (c.getHeight()/2)-(string_height/2), p);
这将使文本居中,但
String.getWidth()
String.getHeight()
不是真正的方法。因此,我的想法是使用文本的大小和字符串的大小来查找宽度和高度。因此,以下几点:

int string_width = centered_text.length()*p.getTextSize();
int string_height = p.getTextSize();

但我觉得这是错误的,因为不同的字符大小不同。。。任何人都有任何想法。

假设您在JavaSwing中,您想要的是


将返回一个包含字符串大小的矩形2D。

不是答案,但:是的,如果您不使用单间距字体,不同的字符将具有不同的宽度。此外,如果渲染足够高级,可能会引入字距调整(即字体之间的可变间距)。最后,您可能不希望垂直对齐到最高字母和基线的中间,而是从字体的X高度到基线。您使用的库是什么?在SWT中有`getStringExtent(字符串)。检查
new FontMetrics(canvas.getFont()).getStringBounds(someString, canvas.getGraphics());