美文网首页
Android的DrawText详解

Android的DrawText详解

作者: Doikki | 来源:发表于2018-01-24 19:41 被阅读1483次

如果你经常使用Canvas的draw***方法去绘制一些图像图形,绘制的坐标是从Canvas左上角开始计算的,如果想要把一个图像放到某个位置,直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样,如果你传递进去字符串,会发现文字的位置和你指定的不一样。



对于一段文字来说,如果你想把他画到Canvas上,首先你要确定这段文字的范围,即宽度和高度,那么怎么去取这一段的高度呢,如果你在网上搜,会有很多种答案,具体应该用哪一种呢?这要看你到底需要什么样的尺寸了。

Paint.getTextBounds: 当你通过这个方法来获取尺寸的时候,你可以得到能够包裹文字的最小矩形,就是图中红色边框的那部分,你可以得到一个Rect对象,包含这个最小尺寸的几个值。坑其实就在这里:这里的Rect对象坐标并不是以左上角为准的,而是相对于左边中间靠下位置的一个点,就是图中的黄色五角星。而这里水平的Baseline指的是字符串对齐的一条线。既然这样,r.top就是一个负值了,r.bottom会是一个小一点的正值,r.left和r.right在图中画的都很清楚。通过r.width()和r.height()来获取尺寸。

那么文字的偏移就好说了,比如说你要把文字画在Canvas的左上角,坐标是(0,0),但是当你通过:

canvas.drawText(“dangwen”,0,0,paint);

来画文字的时候,发现只有文字的下半部分画出来了,因为你传递进去的参数应该是以Baseline为标准的,正确的方法是:

canvas.drawText(“dangwen”,-r.left,-r.top,paint);

Paint.getFontMetricsInt(): 当你通过这里方法来获取尺寸的时候,你获取的只是一个垂直方向上的尺寸,这里的ascent代表的是字体的上部,descent代表的是字体的下部,这里需要注意的是这和上面获得的Rect的top和bottom不太一样,他们比比ascent和descent距离稍微小一些,这些具体的高度可能和不同的字体和渲染方式有关系,这里就不深入了 #我是不懂#。

然后如果把文字写入TextView(图中蓝色部分)并且设置TextView的高度和宽度设为wrap_content,那么TextView的高度就正好是FontMetricsInt.top – FontMetricsInt.bottom, 那宽度呢? Paint.measureText()。

相关文章

  • Hencoder学习笔记1-2

    HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解 颜色效果drawText...

  • Android的DrawText详解

    如果你经常使用Canvas的draw***方法去绘制一些图像图形,绘制的坐标是从Canvas左上角开始计算的,如果...

  • Text绘制相关

    参考 Canvas DrawText详解TextView预渲染研究TextView源码解析

  • drawText详解

    使用Canvas的draw***方法去绘制一些图像图形,绘制的坐标是从Canvas左上角开始计算的,但是drawT...

  • Android中canvas中drawText详解

    开篇 安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很...

  • 自定义 View基础(三)

    Paint 详解 Paint 的 API 大致可以分为 4 类: 颜色 效果 drawText() 相关 初始化 ...

  • Android drawText

    drawText canvas.drawText(String text, float x, float y, P...

  • android自定义View:drawText详解

    一、概述 1. 四线格与基线 小时候,我们在刚开始学习写字母时,用的本子是四线格的,我们必须把字母按照规则写在四线...

  • android drawtext 之baseline

    在android中绘制文本的方法如下 drawText( String text, floatx, floaty...

  • android drawText居中

    比较简单的东西,为了防止以后忘记,这里记录下。 注意以下几点 public void drawText(@NonN...

网友评论

      本文标题:Android的DrawText详解

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