关于在Canvas指定位置绘制文本的计算
2018-03-08 本文已影响690人
INeil
绘制文本api
在Canvas上绘制文本使用的api
Canvas.drawText(text,baselineX,baselineY,Paint)
两个坐标系
需要注意的是,此时涉及到2个坐标系,一个是Canvas
的,一个是文本
的
其中Canvas
坐标系与常用的Android坐标系一致,左上角为原点[0,0]
而文本
的坐标系如下图:
文本
坐标系可以看作是垂直
一维的,其中红色的baseline
为原点,向上为负值
,向下为正值
上图中top/ascent/descent/bottom,分别为该点到
baseline
的距离,可以通过FontMetric获得(Paint.getFontMetrics),粉色的center
是没有的
需求一:在Canvas上指定一个点pointTopY
为绘制文字的top
此时我们需要根据pointTopY
的位置计算baselineX
和baselineY
显然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