我尝试了解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
?
答案 0 :(得分:0)
显然,此功能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/的帮助,以帮助您理解此方法的使用。