android - Canvas 的 `drawTextRun` 有什么用?它与 `drawText` 有何不同?

标签 android canvas text android-canvas drawtext

我试图了解 drawTextRun 的用法,但找不到它们与 canvas 中的普通 drawText 有何不同

下面的代码

        canvas.drawTextRun(TEXT,
            0, TEXT.length,
            0, TEXT.length ,
            x, y, false, paint)

        canvas.drawText(TEXT,
            x, y, paint)

产生相同的结果。我试着绕过 0TEXT.length,但除了显示较短的 TEXT 之外没有明显区别。

我阅读了 https://developer.android.com/reference/kotlin/android/graphics/Canvas.html#drawTextRun%28kotlin.CharArray%2C+kotlin.Int%2C+kotlin.Int%2C+kotlin.Int%2C+kotlin.Int%2C+kotlin.Float%2C+kotlin.Float%2C+kotlin.Boolean%2C+android.graphics.Paint%29 中的帮助

它的描述是 在一个方向上绘制一系列文本,并带有用于复杂文本形状的可选上下文。 什么是复杂文本整形

最佳答案

显然,此函数 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)

它会产生

enter image description here

但是,如果我们更改上下文长度,(即显示的单词不完整,但它的相邻第一个和最后一个字母未显示)

    private val TEXT = "عربى"

    canvas.drawTextRun(TEXT,
        1, TEXT.length - 1,
        0, TEXT.length,
        x, y,
        true, projectResources.paint)

如下所示

enter image description here

简而言之,尽管有相同的字母,但在不同的上下文中,它的写法不同。

注意:感谢https://hencoder.com/ui-1-3/以阐明如何使用此方法。

关于android - Canvas 的 `drawTextRun` 有什么用?它与 `drawText` 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54906371/

相关文章:

linux - 如何搜索 'String' 并立即返回值?

java - 如何向 FCM(Firebase 云消息传递) token 的特定用户发送消息?

android - 在 material-calendarview 中向日期添加文本

安卓媒体播放器 : setDataSource issue for downloaded media file

java - Android游戏开发几个场景

c# - Windows 窗体中的文本动画

text - Awk - 比较每一行以查找重复字段,并在行尾添加一些措辞

java - android studio 如何将导航 Activity 中的 fragment 设置为启动页面

JavaScript setInterval : multiple intervals

javascript - 检测 HTML Canvas 内某些点的鼠标悬停?