Android中canvas中drawText详解

发布时间:2024-06-14 01:32:02 来源:君肯网

安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(drawCircle),画线(drawLine)。今天我们的要看的问题,是drawText(文字)。为什么要单独说画文字,因为安卓的drawText中,基线问题常常困扰我们,到底该怎么计算基线?正题开始:

2.再看图蓝色矩形框,来自于Paint中getFontMetrics方法中,大致意思是获取该字体的相关参数,参照api29文档 大致意思是,ascent 是单行字符距离基线的顶部最打值,top是所有字符距离基线的最高值,descent 是单行字符距离基线的底部最大值,bottom是所有字符距离基线的顶部最大值。

C++ API函数DrawText的用法?

使用Canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,通过一定的算法将字符串分割成多个部分,然后分别调用drawText一部分一部分的显示, 但是这种显示效率会很低。

StaticLayout是android中处理文字换行的一个工具类,StaticLayout已经实现了文本绘制换行处理

StaticLayout的公开的构造函数有三个

以11个参数的构造方法为例,各个参数的意义如下:

通过查看源码,我们知道,11个参数的构造方法调用的是13个参数的构造方法,但是这个方法是@hide 的,我们是没有调用的,外部是无法知道的,但是我们可以通过反射获取,对反射不熟悉的可以参考这一片文章 你必须掌的握反射用法

我们可以看到最后一个参数,可以设置显示的最大行数,默认是Integer.MAX_VALUE

也就是说,利用这个可以设置这个属性

C++API函数DrawText函数用于在指定的矩形里写入正文。

函数原型

int DrawText(

    HDC hDC, // 设备描述表句柄

    LPCTSTR lpString, // 将要绘制的字符串

    int nCount, // 字符串的长度

    LPRECT lpRect, // 指向矩形结构RECT的指针

Android中canvas中drawText详解

    UINT uFormat // 正文的绘制选项

)

参数说明

hdc:[输入]设备环境句柄。

lpString:[输入]指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以结束的。 如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符。

nCount:[输入]指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以结束的,DrawText会自动计算字符数。

lpRect:[输入/输出]指向结构RECT的指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标)。

uFormat:[输入]指定格式化文本的方法。它可以下列值的任意组合,各值描述如下:

DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。

DT_CENTER:指定文本水平居中显示。

DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。

DT_SINGLELINE:单行显示文本,回车和换行符都不断行。

返回值

如果函数调用成功,返回值是正文的高度(逻辑单位)。如果指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect-&gttop到绘制的正文的底部的偏移值。如果函数调用失败,返回值是0

以上就是关于Android中canvas中drawText详解全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(dra…
查看详情
安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(dra…
查看详情
安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(dra…
查看详情
相关文章
推荐游戏
风之谷
风之谷
游戏资讯 10.5M
下载
斗罗大陆3
斗罗大陆3
游戏资讯 566.9M
下载
冠军网球
冠军网球
游戏资讯 148.1M
下载
最佳炮手
最佳炮手
游戏资讯 68.1M
下载
如梦下弦月
如梦下弦月
游戏资讯 840.1M
下载
富甲封神传
富甲封神传
游戏资讯 263.0M
下载