文字的baseLine算法

本文解释了在使用Canvas的drawText方法时,如何计算基于FontMetrics的Baseline坐标,特别是如何确定dy值,即文本基线到字体底部或顶部距离的一半。
摘要由CSDN通过智能技术生成

 使用canvas的drawText方法时候,除了要传入画笔和text还需要传入一个x坐标和y坐标。这边的x和y坐标是Baseline的坐标。

    public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint) {
        super.drawText(text, x, y, paint);
    }

 

top:是 baseLine到最高字符的最高处的距离 ps:为负值

bottom:是baseLine到最低字符的最低处的距离 ps:为正值

基线的位置:控件高度的一半+dy

所以重点就在于dy的高度怎么求? 

top为负数,bottom为正数可以把baseLine当做一个虚拟的x轴,y轴是向下的。y0,y1,y3,y4都是由这个虚拟的两个轴计算得出。比如说y1的值就是y1与baseLine的绝对值。

从图中可以得知:
dy=(top的绝对值+bottom的绝对值)的-半-bottom的位置可得:
dy=(bottom -top)/2-bottom
为什么是bottom-top?
因为top是负值bottom为正值所以绝对值之后就是bottom-top。

//dy代表的是:高度的一半到baseLine的距离
//获取文字排版信息
Paint.FontMetricsInt fontMetricsInt = mPaint.getFontMetricsInt();
int dy =(fontMetricsInt.bottom -fontMetricsInt.top)/2- fontMetricsInt.bottomint
baseLine =getHeight()/2 + dy;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值