优秀的手机游戏下载!
首页 Android中canvas中drawText详解

Android中canvas中drawText详解

发布时间:2024-06-14 01:32:02 编辑:手游帝 浏览:126

安卓写自定义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也很丰富。我们经常用到的画圆(drawCircle),画…
查看详情
安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(drawCircle),画…
查看详情
安卓写自定义View中有一个类相信大家不会陌生,那就是Canvas。Canvas给我们调用者提供的api也很丰富。我们经常用到的画圆(drawCircle),画…
查看详情
相关资讯
猜你喜欢