Canvas.drawText 是以哪里为基线往什么方向开始画的。有什么居中方案?

0 前言

  Canvas.drawText(String text, float x, float y, Paint paint) 这个方法在绘制文本时是从以什么为基线向什么地方开始绘制呢,水平方向上,可以通过设置 setTextAlign(Paint.Align.??) 来设置基线在文本左边、右边或者中间。但是垂直方向上是在哪呢?

1 知道基线的位置后如何确定 Canvas.drawText 的 y 值

  假设以文本底部为基线,向上画。即如下图所示:
在这里插入图片描述
  按照这种说法,如果我想让文本在一个矩形中垂直方向上居中,这时,Canvas.drawText 中 y 就为 a + text.height / 2。或者是另外一种说法,a + (文本 “Text” 垂直方向上的中线与基线的距离 )
在这里插入图片描述
  如果不是以文本底部为基线,而假设是基线和文本有一定距离,这时 Canvas.drawText 中 y 就很好理解了。a + (文本 “Text” 垂直方向上的中线与基线的距离 )
在这里插入图片描述

2 如何确定基线与 Text 的位置关系

  通过 Paint.getTextBounds(String text, int start, int end, Rect rect),我们可以得到一个矩形值 rect,我们将这个矩形画出来,就比如我使用代码Paint.getTextBounds(“1”, int start, int end, Rect rect)。
在这里插入图片描述
Paint.getTextBounds(“*”, int start, int end, Rect rect)。
在这里插入图片描述
这个最小矩形就是位置就是以(0,0)为基线的结果。这个矩形与(0,0)的位置关系就是文本与基线的位置关系 这时我们要求文本 “Text” 垂直方向上的中线与基线的距离就很简单了。

3 垂直方向上居中方案

    String content;
    Rect textRect = new Rect();
    Paint paint = new Paint;
    paint.set....;
    paint.getTextBounds(content, 0, content.length(), textRect);
    int height = 0 - (textRect.top + textRect.bottom) / 2;
    float y = a  + height; // 这里 a 是框高度的一半
    canvas.drawText(content, x, y, textPaint);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值