Android中FontMetrics对象的各种基准线

字体属性及测量(FontMetrics).doc 立即下载

Android中FontMetrics对象的各种基准线

Android中FontMetrics对象的各种基准线(以及怎么获取文字的width和height) 。

Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。

  1. public static class FontMetrics {  
  2.     /** 
  3.      * The maximum distance above the baseline for the tallest glyph in  
  4.      * the font at a given text size. 
  5.      */  
  6.     public float   top;  
  7.     /** 
  8.      * The recommended distance above the baseline for singled spaced text. 
  9.      */  
  10.     public float   ascent;  
  11.     /** 
  12.      * The recommended distance below the baseline for singled spaced text. 
  13.      */  
  14.     public float   descent;  
  15.     /** 
  16.      * The maximum distance below the baseline for the lowest glyph in  
  17.      * the font at a given text size. 
  18.      */  
  19.     public float   bottom;  
  20.     /** 
  21.      * The recommended additional space to add between lines of text. 
  22.      */  
  23.     public float   leading;  
  24. }  
它的各基准线可以参考下图:



说明 :base可以认为是0, ascent和top是个负值,descent和bottom是个正值

上图其实是通过代码画出来的,具体代码如下:

  1. /** 绘制FontMetrics对象的各种线 */  
  2. mPaint.reset();  
  3. mPaint.setColor(Color.WHITE);  
  4. mPaint.setTextSize(80);  
  5. // FontMetrics对象   
  6. FontMetrics fontMetrics = mPaint.getFontMetrics();  
  7. String text = "abcdefg";  
  8. // 计算每一个坐标   
  9. float textWidth = mPaint.measureText(text);  
  10. float baseX = 30;  
  11. float baseY = 700;  
  12. float topY = baseY + fontMetrics.top;  
  13. float ascentY = baseY + fontMetrics.ascent;  
  14. float descentY = baseY + fontMetrics.descent;  
  15. float bottomY = baseY + fontMetrics.bottom;  
  16. // 绘制文本   
  17. canvas.drawText(text, baseX, baseY, mPaint);  
  18. // BaseLine描画   
  19. mPaint.setColor(Color.RED);  
  20. canvas.drawLine(baseX, baseY, baseX + textWidth, baseY, mPaint);  
  21. mPaint.setTextSize(20);  
  22. canvas.drawText("base", baseX + textWidth, baseY, mPaint);  
  23. // Base描画   
  24. canvas.drawCircle(baseX, baseY, 5, mPaint);  
  25. // TopLine描画   
  26. mPaint.setColor(Color.LTGRAY);  
  27. canvas.drawLine(baseX, topY, baseX + textWidth, topY, mPaint);  
  28. canvas.drawText("top", baseX + textWidth, topY, mPaint);  
  29. // AscentLine描画   
  30. mPaint.setColor(Color.GREEN);  
  31. canvas.drawLine(baseX, ascentY, baseX + textWidth, ascentY, mPaint);  
  32. canvas.drawText("ascent", baseX + textWidth, ascentY + 10, mPaint);  
  33. // DescentLine描画   
  34. mPaint.setColor(Color.YELLOW);  
  35. canvas.drawLine(baseX, descentY, baseX + textWidth, descentY, mPaint);  
  36. canvas.drawText("descent", baseX + textWidth, descentY, mPaint);  
  37. // ButtomLine描画   
  38. mPaint.setColor(Color.MAGENTA);  
  39. canvas.drawLine(baseX, bottomY, baseX + textWidth, bottomY, mPaint);  
  40. canvas.drawText("buttom", baseX + textWidth, bottomY + 10, mPaint);  
相信通过以上程序,能够很好的理解topLine,buttomLine,baseLine,ascentLine,descentLine。

另外:Paint类有两个方法

  1. /** 
  2.  * Return the distance above (negative) the baseline (ascent) based on the 
  3.  * current typeface and text size. 
  4.  * 
  5.  * @return the distance above (negative) the baseline (ascent) based on the 
  6.  *         current typeface and text size. 
  7.  */  
  8. public native float ascent();  
  9.   
  10. /** 
  11.  * Return the distance below (positive) the baseline (descent) based on the 
  12.  * current typeface and text size. 
  13.  * 
  14.  * @return the distance below (positive) the baseline (descent) based on 
  15.  *         the current typeface and text size. 
  16.  */  
  17. public native float descent();  
ascent():the distance above the baseline(baseline以上的height)

descent():the distance below the baseline(baseline以下的height)

所以ascent() + descent() 可以看成文字的height。

到此为止,怎么获取文字的height和width都已经揭晓了:

获取height : mPaint.ascent() + mPaint.descent()

获取width : mPaint.measureText(text)

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育) LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。 阅读详情

相关推荐

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6032

使用 FontMetrics 计算文本长度

假设你要在Swing中使用Graphics对象画一些字符。你的程序需要显示两行字符。程序调用Graphics.drawString方法画第一行,然后,在调用一次,画第二行。DrawString方法需要你为字符指定起始位置X, Y。对于第二行,你假设Y增加8将实现这一功能。就是,你假设字符的高度是8。例如,如果第一行的起始位置是100,100,那么,第二行的起始位置是100,108。其代码段如下:

香蕉熊的专栏 6151

Windows下Python调用D435i相机避坑指南:从SDK版本选择到RealSense Viewer报错解决

本文详细介绍了在Windows环境下使用Python调用Intel D435i相机的完整避坑指南。重点解决了SDK版本选择问题,推荐使用稳定的Intel RealSense SDK 2.54.2版本,并提供了从环境配置、常见报错解决到实际应用案例的全流程实践指导,帮助开发者高效完成相机部署与开发。

palm99的专栏 923

baseLine和FontMetrics

相关文章:自定义View之绘图篇(一):基础图形的绘制自定义View之绘图篇(二):路径(Path)自定义View之绘图篇(三):文字(Text)了解baseLine和FontMetrics有助于我们理解drawText()绘制文字的原理,下面我们一起来看看呗。一、baseLine 基线记得小时候练习字母用的是四线格本,把字母写在四线格内,如下:那么在canvas中drawText绘制文字时候,也...

oneblue123的博客 898

【知识分享】IBIS 建模指南 05

本文详细阐述了IBIS模型创建过程中的关键技术和数据规范要求。主要内容包括:1. 数据完整性检查要点,强调I-V和V-T数据必须覆盖所有工艺角且匹配;2. 数据限制处理方法,介绍100/1000点限制下的两种数据筛选算法;3. 特殊数据处理技术,包括内部终端电阻调整和V-T表时间窗口选择;4. 高级关键字应用,涵盖[ModelSelector]、[Sub model]、[DiffPin]等复杂功能实现方法;5. 预加重缓冲器等特殊结构的建模方案。

一只豌豆象的博客 1594

基于综合阻抗特征的配电架空线路单相断线故障区段定位研究

本文提出了一种基于综合阻抗特征的配电架空线路单相断线故障区段定位方法。通过分析故障后正序、负序阻抗变化,构造综合阻抗判据实现精准定位。仿真结果表明:该方法能有效识别故障区段,差异度判据显著(故障区段达0.508,非故障区段<0.016);对过渡电阻(1-200Ω)和负荷变化具有强鲁棒性,定位准确率不受影响。相比传统方法,综合阻抗法放大了断线故障特征,解决了弱故障信号检测难题,为配电网安全运行提供了可靠的技术手段。

AI的内部世界的博客 79

Android 文本 计算 baseline 方法

Paint.FontMetrics Paint.FontMetricsInt 里面有top,ascent,desent, bottom, leading这几个属性 top = top线的y坐标 - baseline线的y坐标 bottom = bottom线的y坐标 - baseline...

chenjia6409的博客 963

滤波电路Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了滤波电路的基础知识及其应用。首先按频率选择性和实现方式对滤波电路进行分类,详细阐述了低通、高通、带通、带阻滤波器以及无源、有源滤波器的特点。接着重点分析了桥式整流电容滤波、电感滤波、LC滤波和CRπ型滤波四种典型电路的工作原理、应用场景及设计要点。通过理论公式和实际案例,指导如何选择滤波元件参数,考虑寄生效应,并通过仿真验证设计效果。最后提供了硬件工程师笔试面试相关的技术资源链接,包括器件知识、电路仿真及企业真题解析等内容。本文可作为电子电路设计领域工程技术人员的学习参考资料。

XU157303764的博客 2166

Android绘制文本基本概念之- top, bottom, ascent, descent, baseline

通过一个图来了解一下这些概念:这个图是从网上download下来的。 baseline是基线,在Android中绘制文本都是从baseline处开始的,从baseline往上至至文本最高处的距离称之为ascent(上坡度),baseline至文本最低处的距离称之为descent(下坡度)。 top和bottom是绘制文本时在最外层留出的一些内边距。 baseline是基线,baseline以上

殇神马的博客 1万+

基于YOLOv11的建筑图纸物体检测系统设计与实现

包含多种建筑平面图,标注了墙体、门窗等元素:CAD格式的建筑图纸数据集:专门针对建筑元素的标注数据集自定义数据集:使用LabelImg等工具自行标注的建筑图纸本文以FloorPlanDataset为基础,结合部分自定义标注数据构建混合数据集。wall (墙体)door (门)window (窗)stair (楼梯)furniture (家具)text (文字标注)dimension (尺寸标注)column (柱子)

YOLO 536

【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据

使用 LCZ 替换 WRF 运行中的 LUCC 数据

WW、forever的博客 988

android 4.4 字体属性,Android字体属性Paint.FontMetrics

前言最近在做需求的时候需要一个日历控件,在github上看CalendarView不错,UI部分完全可以由使用者来自定义绘制,绘制过程中遇到了Paint.FontMetrics,梳理一下。概念FontMetrics 字体度量,该类是Paint的内部类,通过getFontMetrics()方法可获取字体相关属性。字体的几个属性baseline  Android文本绘制是以baseline为基准的as...

weixin_29997223的博客 497

(10)三相三绕组变压器的建模仿真

建立了三相三绕组变压器组的Simulink仿真模型,通过实例进行了仿真计算。

weixin_45670943的博客 1141

Android中FontMetrics对象的各种基准线(以及怎么获取文字的width和height)

Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。 public static class FontMetrics { /** * The maximum distance above the baseline for the tallest glyph in * the font at a given text size. ...

web开发 534

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 坐标对象,Android使用FontMetrics对象计算位置坐标

Canvas绘制文本时,使用FontMetrics对象,计算位置的坐标。public static class FontMetrics {/*** The maximum distance above the baseline for the tallest glyph in* the font at a given text size.*/public float top;/*** The r...

weixin_36368413的博客 296

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android_FontMetrics

Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。 public static class FontMetrics { /** * The maximum distance above the baseline for the tallest glyph in * the font at a given text size.

teletian的专栏 8846

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android FontMetrics 学习笔记

Android FontMetrics 学习笔记今天学习自定义控件时, 用到Canvas 绘制文本,其中使用了FontMetrics对象,计算位置的坐标 FontMetrics源码如下: /** * Class that describes the various metrics for a font at a given text size. * Remember, Y values incr

zzzccj的博客 393

Android字体度量(FontMetrics)

一) 字体的几个参数 ,以Android API文档定义为准,见下图要点如下:1. 基准点是baseline2. Ascent是baseline之上至字符最高处的距离3. Descent是baseline之下至字符最低处的距离4. Leading文档说的很含糊,这个我还不清楚,但有人说是上一行字符的descent到下一行的ascent之间的距离,也有人说不是5. Top指的是指的是最高字符到bas...

heng615975867的专栏 2486

安卓drawText中的坑

安卓drawText的坑

momo_ibeike的博客 2194

Android绘图之drawText,getTextBounds,measureText,FontMetrics,基线(14)

1如何测量一段文本占用的长度和宽度 Paint类提供了测量宽高的方法: getTextBounds(String text, int start, int end, Rect bounds) 返回一个包含所有字符,默认从(0,0)开始的最小矩形的矩形框。 measureText(String text, int start, int end): 返回text的宽度。 2问题1 drawText函数...

lidongxiu0714 7337

canvas.drawText理解和FontMetrics文字测量

在ui开发开发中,label文本标签是最长用到的。android中提供了TextView帮我们用来展示文本文字。而android的Canvas也提供了drawText用于帮助我们在自定义view的时候绘制展示文本。 先简单看一下这段代码 private val paint = Paint(Paint.ANTI_ALIAS_FLAG) init { paint.textSize = 150F paint.style = Paint.Style.FILL_AND_STROKE pain

步行者 861

Android获取文本的宽度和高度

在文本数据绘制时获取文本的宽度和高度

a307326984的博客 5605

Android自定义View(二):Canvas绘制文本

一、Canvas绘制文本相关方法 Canvas里面有以下几类绘制文本的相关方法: drawText系列,此系列方法为绘制文本的常规方法 drawText(String text, float x, float y, Paint paint) drawText(String text, int start, int end, float x, float y, Paint paint) drawText(CharSequence text, int start, int end, float x, fl

1246
上一篇: Android/java 读写文件
下一篇: 修改eclipse的注释模板
hellohaifei
博客等级 码龄14年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值