美文网首页
自定义view文字测量备忘

自定义view文字测量备忘

作者: Codes作业本 | 来源:发表于2020-07-16 14:40 被阅读0次

    Android中文字测量

    获取文字长度:

    • 方式1
    var textValue = "待测量文字"
    var txtLength = mPaint.measureText("待测量文字")
    
    • 方式2
    var textValue = "待测量文字"
    var mRect = Rect()
    mPaint.getTextBounds(textValue, 0, textValue.length, mRect)
    //文字具体尺寸通过Rect获取
    var left = mRect.left
    var top = mRect.top
    var right = mRect.right
    var bottom = mRect.bottom
    

    字体的属性

    leading   上一行文字的descent到当前行文字的ascent称为行距

    top 最高字符到baseline的值,以baseline为基准,负值

    ascent   baseline之上至字符最高处的距离,以baseline为基准,负值

    baseline  Android文本绘制是以baseline为基准的

    descent   baseline之下至字符最低处的距离,以baseline为基准,正值

    bottom 最下字符到baseline的值,以baseline为基准,正值

    //通过如下方式获取字体的属性值
    var mFrontMetrics: Paint.FontMetrics  = mPaint.fontMetrics
    mFrontMetrics.top
    mFrontMetrics.ascent
    mFrontMetrics.descent
    mFrontMetrics.bottom
    

    需要注意的点是图中文字左下角的Origin的点为文字的原点(文字的左下角)

    baseline基线与Origin点相交,相当于文字的x轴,Origin垂直的线为y轴(文字的左侧边缘)

    x轴上方y值为负,x轴下方y值为正(其他与屏幕坐标象限值相同)

    在onDraw()中绘制文字

    /**
        y = baseLine
        其中center值可以理解成View的基准位置(文字基于Y轴的位置)
        但是仅仅基于center计算显示是不正常的,需要算出baseLine的值,才能正确显示
    */
    var baseLine = 
    center + (mFrontMetrics.bottom - mFrontMetrics.top) / 2 - mFrontMetrics.bottom
    
    canvas.drawText(String text, float x, float y, Paint paint)
    
    
    
    image.png

    相关文章

      网友评论

          本文标题:自定义view文字测量备忘

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