我试着理解drawTextRun
的使用,但是找不到它们与drawText
中的正常canvas
的区别
以下代码
canvas.drawTextRun(TEXT,
0, TEXT.length,
0, TEXT.length ,
x, y, false, paint)
canvas.drawText(TEXT,
x, y, paint)
产生相同的结果。我尝试围绕0
和TEXT.length
玩,但除了显示更短的TEXT
之外,看不到明显不同。
它的描述是Draw a run of text, all in a single direction, with optional context for complex text shaping.
什么是complex text shaping
?
显然,这个函数drawTextRun
没有用于英语或任何具有不变的字符的语言(例如中文)。
它仅对具有字母的语言有用,这些字母将在其相邻字母存在时发生变化。阿拉伯语是一个很好的例子
请参考阿拉伯语Unicode,https://en.wikipedia.org/wiki/Arabic_script_in_Unicode,其中的语言。
EG
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/揭示了这种方法的用途。