美文网首页
自定义view 之 canvas.drawText

自定义view 之 canvas.drawText

作者: 探索的码易 | 来源:发表于2019-11-19 21:00 被阅读0次
    WX20191119-172313@2x.png

    自定义view 绘制字符,水平位置

            mPaint.setTextAlign(Paint.Align.CENTER);
            mPaint.setAntiAlias(true);
            mPaint.setColor(Color.RED);
            mPaint.setStyle(Paint.Style.FILL);
            mPaint.setTextSize(120);
            canvas.drawText("testbaseline",400,200,mPaint);
    // 400,200 为用来描述 view 内容的位置 相对点, setTextAlign 来描述相对位置(文字和)
        
    
    Screenshot_2019-11-19-14-52-17-489.png

    蓝色线的交叉即为相对的点

    自定义view 绘制字符,垂直方向

    如开头的图片的.为字符的基线

            Paint.FontMetrics  fontMetrics=mPaint.getFontMetrics();
            Log.e("baseline","ascent: "+fontMetrics.ascent);
            Log.e("baseline","bottom "+fontMetrics.bottom);
            Log.e("baseline","top "+fontMetrics.top);
            Log.e("baseline","descent "+fontMetrics.descent);
            Log.e("baseline","leading "+fontMetrics.leading);
    
            E/baseline: ascent: -109.92
            E/baseline: bottom 31.08
            E/baseline: top -107.88
            E/baseline: descent 36.12
            E/baseline: leading 0.0
    

    可以看到 leading 通常的值为0 top 的值为负数,这个需要注意

    可以看出
    基线到中线的距离=(Descent+Ascent)/2-Descent

    推倒过程为,由于leading =0 ,所以 不考虑
    基线到中线的距离+Descent=(Descent+Ascent)/2

    基线到中线的距离=

    由于文字的位置是基于baseline的,所以想让文字父容器的中间;
    内容的中间线和父容器的中间重合;
    canvas.drawText 为y 设置baseline =height/2+(Descent+Ascent)/2-Descent

    相关文章

      网友评论

          本文标题:自定义view 之 canvas.drawText

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