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

绘制文本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的位置计算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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容