Paint中FontMetrics的一些变量解析

我们很多时候需要在自定义View中绘制一些Text,这时候需要用到Paint中的drawText

public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint)

这里第三个参数y是指的是baseline位置(很多人都使用getMeasureHeight()/2尴尬

到底baseline是什么呢?我们drawText的时候怎么计算y值?


首先我们先理解FontMetrics中的baseline、ascent、descent、top、bottom的具体含义,先看下面图


baseLine: 灰色的线

ascent: 上面蓝色线距离baseline的距离, 这个是负值

top: 是所有ascent最小数值(因为是负值,就是最高的),图中是上面绿色的线,这个也是负值

descent: 是下面红色的线到baseline的距离,这个是正值

bottom: 是所有字符descent最大值


在自定义View中drawtext的时候,居中显示,需要根据下面公式计算


 	Rect bounds = new Rect();
        Paint.FontMetrics fm = textPaint.getFontMetrics();
	//text高度
        int textH = (int)(fm.descent - fm.ascent);
        textPaint.getTextBounds(data, 0, data.length(), bounds);
        startX = (getMeasuredWidth() - bounds.width())/2;
	//ascent是负值
        startY = (int)((getMeasuredHeight() - textH)/2 - fm.ascent);
        canvas.drawText(data, startX, startY, textPaint);

代码比较简单,就不上传源码了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值