Canvas drawText字体居中

Canvas drawText字体居中

Canvas drawText字体居中

在自定义view 中 drawtext 应用的很广泛,下面介绍以下里面的参数
常用的方法一般是:

 drawText( String text, float x, float y, Paint paint)

注:1、text 就是要绘制的文本
2、x ,y 绘制文本时所在的 x 和y 的坐标
3、paint 画笔

下面着重说明一下 x 和y 的取值:

通常情况下,绘制文本是在一个矩形中绘制(rect),想要字体居中 直接取值 y=rext.getY(),其实文字不是居中的, 下面一张图可以很明确的显示出来(图片是别人博客截图过来的)
在这里插入图片描述其中 矩形的中点就是 rect.getY(),而文字的绘制是从基线开始绘制的, 所以想要绘制文字在Y方向上居中,需要找到基线的坐标, 但问题是基线是什么? 下面还是先上一张图片(都是在网上截取的别人的)
在这里插入图片描述

要点如下: 
      1. 基准点是baseline 
      2. Ascent是baseline之上至字符最高处的距离 
      3. Descent是baseline之下至字符最低处的距离 
      4. Leading文档说的很含糊,其实是上一行字符的descent到下一行的ascent之间的距离 
      5. Top指的是指的是最高字符到baseline的值,即ascent的最大值 
      6. 同上,bottom指的是最下字符到baseline的值,即descent的最大值
 其中基本的都是 以 baseline 为标准来划分的。
 顺便说一下的取值的正负问题:ascent是负,descent是正,同样 top 是负,bottom是正

重点来了,获得正确的Y值:同样先来一张图片(自己画的)

在这里插入图片描述

主要是获得baseline 的位置,首先文字的自身所占的高度  与  rect 的高度中心重合,
得到中线和baseline的距离:
 (Math.abs(ascent)+Math.abs(descent))/2-Math.abs(descent),
 考虑正负值之后优化计算方式:
(fm.descent - fm.ascent) / 2- fm.descent或者 Math.abs(fm.ascent()) - (fm.descent() -  fm.ascent()) / 2F。
其中fm=textPaint.getFontMetrics();只有设置textPaint的setTextSize之后才有意义。
之后或的Y值就简单了:
targetRect.centerY() + (fm.descent - fm.ascent) / 2- fm.descent ;
或者targetRect.centerY() + Math.abs(fm.ascent()) - (fm.descent() -fm.ascent()) / 2F;

还有一个值得一提就是: textPaint.setTextAlign();

有三个属性:
1.Paint.Align.CENTER
2.Paint.Align.LEFT
3.Paint.Align.RIGHT
其实意思就是 x值对应的 文本的位置,开始绘制文本
当我们将文本对齐方式设置为 CENTER 后就相当于告诉Android我们这个文本绘制的时候从文本的中点开始向两端绘制,如果设置为 LEFT 则从文本的左端开始往右绘制,如果为 RIGHT 则从文本的右端开始往左绘制

以上是canvas.drawText的所要讲解的全部内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值