关于在Canvas指定位置绘制文本的计算

绘制文本api

在Canvas上绘制文本使用的api
Canvas.drawText(text,baselineX,baselineY,Paint)

两个坐标系

需要注意的是,此时涉及到2个坐标系,一个是Canvas的,一个是文本
其中Canvas坐标系与常用的Android坐标系一致,左上角为原点[0,0]
文本的坐标系如下图:

关于在Canvas指定位置绘制文本的计算_第1张图片
文本坐标系

文本坐标系可以看作是 垂直一维的,其中红色的 baseline为原点,向上为 负值,向下为 正值
上图中top/ascent/descent/bottom,分别为该点到 baseline的距离,可以通过FontMetric获得(Paint.getFontMetrics),粉色的 center是没有的

需求一:在Canvas上指定一个点pointTopY为绘制文字的top

此时我们需要根据pointTopY的位置计算baselineXbaselineY
显然pointTop.x即是baselineX
baselineY=pointTopY-FontMetric.top -注意FontMetric.top的值为负值

需求二:在Canvas上指定一个点pointCenterY为绘制文字的center

baselineY=pointCenterY+((FontMetric.bottom-FontMetric.top)/2-FontMetric.bottom)
简化一下
baselineY=pointCenterY-FontMetric.bottom/2-FontMetric.top/2

需求三:在Canvas上指定一个点pointBottomY为绘制文字的bottom

baselineY=pointBottomY-FontMetric.bottom

你可能感兴趣的:(关于在Canvas指定位置绘制文本的计算)