我试图了解 drawTextRun
的用法,但找不到它们与 canvas
中的普通 drawText
有何不同
下面的代码
canvas.drawTextRun(TEXT,
0, TEXT.length,
0, TEXT.length ,
x, y, false, paint)
canvas.drawText(TEXT,
x, y, paint)
产生相同的结果。我试着绕过 0
和 TEXT.length
,但除了显示较短的 TEXT
之外没有明显区别。
它的描述是
在一个方向上绘制一系列文本,并带有用于复杂文本形状的可选上下文。
什么是复杂文本整形
?
最佳答案
显然,此函数 drawTextRun
对英语或任何具有不变字符的语言(例如中文)没有用处。
它仅对具有会根据其相邻字母的存在而改变的字母的语言有用。一个很好的例子是阿拉伯语。
请引用阿拉伯语 Unicode,https://en.wikipedia.org/wiki/Arabic_script_in_Unicode , 那里的语言。
例如
4 个字母的阿拉伯语单词 عربى
。 (注意阿拉伯语是从右到左)
如果单独写是
ù
б
Ø
ى
请注意单独放置时形状会有所不同。
使用下面的代码
private val TEXT = "عربى"
canvas.drawTextRun(TEXT,
1, TEXT.length - 1,
1, TEXT.length - 1,
x, y,
true, projectResources.paint)
它会产生
但是,如果我们更改上下文长度,(即显示的单词不完整,但它的相邻第一个和最后一个字母未显示)
private val TEXT = "عربى"
canvas.drawTextRun(TEXT,
1, TEXT.length - 1,
0, TEXT.length,
x, y,
true, projectResources.paint)
如下所示
简而言之,尽管有相同的字母,但在不同的上下文中,它的写法不同。
注意:感谢https://hencoder.com/ui-1-3/以阐明如何使用此方法。
关于android - Canvas 的 `drawTextRun` 有什么用?它与 `drawText` 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54906371/