Android DrawText 基线的确定问题

Posted 潇潇微雨up

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android DrawText 基线的确定问题相关的知识,希望对你有一定的参考价值。

在自定义控件的时候,有时候会用到DrawText 方法

  • @param text The text to be drawn
    • @param x The x-coordinate of the origin of the text being drawn
    • @param y The y-coordinate of the baseline of the text being drawn
    • @param paint The paint used for the text (e.g. color, size, style)
      */
      public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint)

x,y 分别表示 基线的开始坐标,并不是 文字左上角的坐标,因为文字的绘制是以基线为基础的


图中的 五角星 所在的线 就是基线 BaseLine

那么如何确定基线的x,y坐标呢

需要借助 Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt();
FontMetricsInt 类 有 top 、bottom 两个成员,
top表示基线到文字最上面的位置的距离 是个负值 bottom为基线到最下面的距离,为正值

如果想要基于一个位置竖直居中,那么居中的位置 坐标假设为 centerY

baseLineY = centerY - (fm.bottom-fm.top)/2- fm.top;

这样就可以确定基线的坐标

所以只需要修改centerY的位置 就可以基于这个位置居中了

或者 比如想在 top 到 bottom 之间竖直居中 那么center = (bottom-top)/2;
baseLineY = (bottom-top)/2 - (fm.bottom-fm.too)/2 - fm.top=
(bottom+top-fm.bottom-fm.top)/2;

最后 不要忘记在 paint.getFontMetricsInt(); 之前设置一下字体大小哦

以上是关于Android DrawText 基线的确定问题的主要内容,如果未能解决你的问题,请参考以下文章

Android基线问题

自定义View drawText()绘制文字

drawText注意事项

Android 简单自定义TextView

Android Canvas drawText实现中文垂直居中

Android drawText 做到文字绝对居中