美文网首页
Android drawText

Android drawText

作者: Heezier | 来源:发表于2021-05-15 10:32 被阅读0次

    drawText

    canvas.drawText(String text, float x, float y, Paint paint)

    image-20210515093225084

    注释:
    text : 文字的内容

    x:文字在X轴的起始坐标

    y:y为文字的基线(baseline)位置,并非文字在Y轴的起始坐标

    baseline

    baseline在文字中的表现,即E和h的下边界线

    我们文字的绘制以baseline为基准,但是文字有可能绘制到baseline以下。

    baseline的值就为以View的左上角为Y轴0点的距离

    img

    FontMetrics

    它是一个Paint的内部类,作用是“字体测量”。它里面呢就定义了top,ascent,descent,bottom,leading五个成员变量

    public static class FontMetrics {
        public float ascent;
        public float bottom;
        public float descent;
        public float leading;
        public float top;
    
        public FontMetrics() {
            throw new RuntimeException("Stub!");
        }
    }
    

    每个值含义如下:

    top/bottom : 限制所有字形的顶部和底部范围,他的值是相对baseline为0点,往上是负值,往下是正值,所以bottom 是一个正数,top是一个负数

    descent/ascent:是限制普通字符的顶部和底部范围,他的值是相对baseline为0点,往上是负值,往下是正值,所以descent是一个正数,ascent是一个负数

    leading:指的是行的额外间距,即对于上下相邻的两 行,上行的 bottom 线和下行的 top 线的距离

    因为语言字符很多,所有用top/bottom

    image-20210515101524848

    FontMetrics的获取:

    Paint.FontMetrics fontMetrics = paint.getFontMetrics();
    

    如下:

    image-20210515090833075

    文字的高度=descent - ascent

    行高 = bottom - top + leading

    绘制在View的Y轴中心

    baseline的位置应该 = View的Y轴中心坐标值 + 文字高度的一半 - descent

    由此可以得到:

    baseline = getHeight()/2 + (fontMetrics.descent - fontMetrics.ascent) / 2 - fontMetrics.descent;

    最终也可以简化为:

     getHeight()/2 - (fontMetrics.descent + fontMetrics.ascent)/2;
    
    image-20210515102714723

    参考文章:

    https://www.jianshu.com/p/a8df026694c8

    https://www.jb51.net/article/158939.htm

    相关文章

      网友评论

          本文标题:Android drawText

          本文链接:https://www.haomeiwen.com/subject/kruhjltx.html