text字体高度的探究

最近学习自定义view,突然感觉对Paint.drawText(String text,int x,int y,Paint paint)的参数自己根本不理解,于是就探究一下吧,这一探究 ,出事了~

第一个参数不说了,需要绘制的字符串,第二个参数自己测试了一下,应该是开始绘制的x坐标,第三个参数那么应该就是绘制开始的y坐标了(字符串的下方),第四个参数画笔,没啥可说的。但是绘制出来之后完全不是那个样子啊?

盗用一张图:嘿嘿,自己懒得截图了

发现没有?外面的蓝色矩形跟字符串,切的好齐整啊好齐整 ,百度了一下现在的矩形的底边就是我们字符的baseline了。。

在盗用一张图:

这里主要介绍的是 FontMetrics(英文的意思是:根据,我的理解是字符图样)

Paint.getFontMetrics 里面的几个方法

ascent英文的意思是:提升 ,字符的上方到baseline的距离,比较好理解

descent 英文的意思是:下降 ,字符的下方到baseline 的距离

top :ascent 的最大值

bottom :descent的最大值

这里 我们可以看出 找个字符的高度是: descent - ascent 这个求字符高度的方法 比较靠谱:

我们一般是:Math.ceil( descent - ascent) 向上取整数 获得字符的高度。

那么根据上面的描述:

如果我想绘制字符 到矩形 垂直居中的话:

Paint.drawText(String text,int x,int y,Paint paint)的参数 应该是这样的

(字符串,(矩形的宽度-字符串的长度)/2,矩形的高度(baseline)/2+字符串的高度/2-字符到baseline的距离(descent),画笔);

换算成公式的话应该是:假设字符串所在的矩形为rect ,则:

(rect.bottom-rect.top)/2+(descent - ascent)/2-descent=

(rect.bottom-rect.top)/2-(descent + ascent)/2,玩会游戏,睡觉了,就这样吧

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-16 10:26:03

text字体高度的探究的相关文章

iOS UITextView 根据输入text自适应高度

#import "ViewController.h" @interface ViewController ()<UITextViewDelegate> // KVO和动态自适应尺寸 @property (nonatomic, strong)UITextView *txtView; // KVO测试 @property (nonatomic, strong)Person *person; @end @implementation ViewController - (void)

input text 字体的影响

字体对input的影响 <html> <head> <meta charset="UTF-8"> </head> <style type="text/css"> input{ background: #EAEEF1; border: 2px solid #EAEEF1; color: #666666; font-family: 'Open Sans', sans-serif; } </style>

关于浏览器window、document、html、body高度的探究

首先说明本人所理解的这几个元素的计算 window高度应当是文档所在窗口的可视高度(没有包括浏览器的滚动条),计算方法document.documentElement.clientHeight document高度应该为文档内容的高度,计算方法Math.max(document.body[ "scrollHeight" ], document.documentElement[ "scrollHeight"]) html高度应当为html元素的高度(包括边框滚动条),

计算字体高度

let str:NSString = "真正的娱乐是应着真正的工作的要求而发生的.冰心 成功的花,人们只惊慕她现时的明艳!然而当初她的芽儿,浸透了奋斗的泪泉,洒遍了牺牲的血雨.冰心 青春活泼的心,决不作悲哀的留滞.冰心 无精打彩的娱乐,绝不能使人生润泽,事业进步.娱乐至少与工作有同...真正的娱乐是应着真正的工作的要求而发生的.冰心 成功的花,人们只惊慕她现时的明艳!然而当初她的芽儿,浸透了奋斗的泪泉,洒遍了牺牲的血雨.冰心 青春活泼的心,决不作悲哀的留滞.冰心 无精打彩的娱乐,绝不能使人生润泽

[Android]Android字体高度的研究

android自定义View绘制的时候,会有很多情况下要与字体打交道,涉及到字体宽度.高度的时候要特别注意一下几个概念,见图: baseLine:一行文字的底线. Ascent: 字符顶部到baseLine的距离. Descent: 字符底部到baseLine的距离. Leading: 字符行间距. Java代码   public class TestOnDraw extends Activity { @Override protected void onCreate(Bundle savedI

android textview 设置text 字体

1.使用不同的字库 mLocalClock.setTypeface(Typeface.SANS_SERIF); Typeface face = Typeface.createFromAsset(getAssets(),"fonts/SIMFANG.TTF"); 2.设置不同的字库,字体在textview中 SpannableString word = new SpannableString("12:45"); word.setSpan(new TypefaceSpa

最新版苹果字体设计的秘密和改变

iOS 9发布后,可能很多用户都没有察觉到界面视觉中那些产生了变化,今日这里介绍的是IOS 9中界面字体的细微变化带来的影响.OS 9的系统字体变成了苹果新推出的旧金山字体,代替了之前用的Helvetica Neue. Helvetica(上),旧金山字体(下) 旧金山字体其实很早的时候已经使用在Apple Watch中,如今苹果更多这种字体运用起来,现在我们市面上使用的一些常见的苹果设备都是用了这种字体,例如:Apple Watch.iPhone.iPad和Mac. Apple Watch 从

我给女朋友讲编程CSS系列(3) CSS如何设置字体的类型、大小、颜色,如何使用火狐浏览器的Firebug插件查看网页的字体

一.CSS如何设置字体的类型.大小.颜色 设计网页时,一般设置body的字体,让其他标签继承body的字体,这样设置特别方便,但是标题标签h1到h6和表单标签(input类型)是没有继承body的字体属性的,它们的字体需要单独设置. 1,  新建一个网页a.html,把下面的代码复制进去. <html> <head> <style type="text/css"> body { font-family : 微软雅黑,宋体; font-size : 1

UGUI Text控件

学习UGUI的Text控件,用于显示文本!.  基本属性就不再啰嗦了! Alignment: 文字以 水平和垂直 对齐方式, Horizontal Overflow: 水平 Wrap: 文字大小和数量超过Text边框宽度,不再显示 Overflow: 文字超过了边框宽度,还是显示出来 Vertical Overflow:垂直 Truncate: 截断,文字垂直超过Text边框高度,不在显示 Overflow:  文字超过了边框高度,还是显示出来 Best Fit: 让文字自适应勾上之后,Font