Какая польза от canvas '`drawTextRun`?Чем он отличается от `drawText`? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь понять использование 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.

Я прочитал справку в 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

Это описаниеDraw a run of text, all in a single direction, with optional context for complex text shaping. Что такое complex text shaping?

1 Ответ

0 голосов
/ 28 февраля 2019

Очевидно, что эта функция 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/ за то, что он пролил свет, чтобы понять использование этогоспособ.

...