Paint测量文字高度

1、原理

1.1 原理综述

        在Android中,文字的描述需要涉及到FontMetrics类。此类中涉及到top、ascent、descent、bottom这几个属性。这些属性具体的文字解释如下:

        top:在一个大小确定的字体中,被当做最高字形,基线(base)上方的最大距离。
        ascent:单行文本中,在基线(base)上方被推荐的距离。
        descent:单行文本中,在基线(base)下方被推荐的距离。
        bottom:在一个大小确定的字体中,被当做最低字形,基线(base)下方的最大距离。

        这几个属性所对应的位置如下图所示:

        07115518_fCBx.jpg

        所以,文字高度=descent-ascent


2、具体的方法

/**
     * 测量文字的高度
     * --经测试后发现,采用另一种带Rect的方式,获得的数据并不准确。
     * 特别是在一些对文字有一些倾斜处理的时候
     * @param paint
     * @return
     */
    public static float measureTextHeight(Paint paint){
        float height = 0f;
        if(null == paint){
            return height;
        }
        Paint.FontMetrics fontMetrics = paint.getFontMetrics();
        height = fontMetrics.descent - fontMetrics.ascent;
        return height;
    }

3、纠错

    之前在网上也看了一些其他的方法,是采用Rect的方法来实现 测量文字的高度的,最终发现,数据并不准确。具体有问题的方法如下:

    /**
     * 测量文字的高度
     * --经测试后发现,这一种方式在某些时候是不准确的。所以不采用
     * @param paint
     * @param textTemp
     * @return
     */
    public static float measureTextHeight2(Paint paint,String textTemp){
        float height = 0f;
        if(null == paint){
            return height;
        }
        Rect rectFont = new Rect();
        paint.getTextBounds(textTemp,0,textTemp.length(),rectFont);
        height = rectFont.height();
        return height;
    }

    

参考地址:

http://blog.csdn.net/eyishion/article/details/51824520

http://sd4886656.iteye.com/blog/1200890

 

转载于:https://my.oschina.net/u/2253892/blog/916144

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值