为何Java TextLayout的getDescent()和getAscent()对x、y返回相同值
问题原因说明
这个现象是TextLayout类的设计特性导致的,和字符本身的形态无关:
getAscent()、getDescent()返回的是当前构造TextLayout所用字体的全局度量值,而非单个字符的实际边界参数:getAscent()是字体所有字符中,从基线到字符最高处的最大距离,覆盖了该字体所有带升部的字符(比如b、d、h等)的高度上限getDescent()是字体所有字符中,从基线到字符最低处的最大距离,覆盖了该字体所有带降部的字符(比如y、g、p等)的深度下限
- 只要你构造两个
TextLayout实例时用的是同一个Font对象,无论传入的单个字符是x还是y,两个方法的返回值必然完全相同。
单个字符垂直居中的修正方案
如果需要针对单个字符做精准的垂直居中,不要用全局的ascent、descent计算偏移量,改为调用TextLayout.getBounds()方法获取当前字符的实际边界矩形,用该矩形的高度参数做偏移计算即可。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

