2016-04-07 5 views
3

Я пытаюсь нарисовать текст по пути, используя холст в Android. Я могу успешно получить текст для рисования на верхней овальной линии. То, что я пытаюсь сделать, это убедиться, что текст центрирован.Нарисовать текст на овальном пути в центре

Проблема в том, что, хотя я могу измерить текст, прежде чем он нарисован вокруг верхней линии овала, я не могу измерить его после. Это позволяет оценить, где текст должен быть нарисован на верхней овальной линии проблематичным, поскольку это всегда немного. Это связано с тем, что, когда я измеряю текст, который будет нарисован первоначально, он измеряется по прямой, а не как представлен в верхней строке овала.

Я пробовал применять setTextAlign(Paint.Align.CENTER), но это заставляет текст рисоваться около 3/4 в пути, а не то, что я хочу.

Есть ли у кого-нибудь идеи, как я мог рассчитать точку, чтобы нарисовать текст так, чтобы он был нарисован мертвой точкой верхней овальной линии или любым альтернативным методом, который может помочь?

Это необходимо сделать, используя холст. Это невозможно сделать с помощью XML TextViews и т. Д.

Спасибо.

Oval to have text drawn on top of

+0

Попытайтесь использовать 'drawTextOnPath()' –

+0

Это то, что я использую, но проблема в том, что текст сосредоточен на верхней половине линии овала. Я могу успешно получить текст, чтобы привлечь вверху, это динамически, чтобы убедиться, что текст центрирован, и это проблема. –

+0

Один из способов - рассчитать ширину отображаемого текста с помощью Paint.getTextBounds(), а затем определить путь соответственно, что устранит необходимость применения выравнивания по тексту. В идеале, объект выравнивания должен работать в соответствии с [документацией] (http://developer.android.com/reference/android/graphics/Canvas.html) –

ответ

0

Вы можете проверить, как эта библиотека сделала это: https://github.com/amulyakhare/TextDrawable

Его, используя тот же подход. Но для нескольких строк это почти невозможно, проблема в этой библиотеке, где я и другие разработчики пытались ее реализовать, и в итоге мы просто используем только xml (круглый, который можно рисовать как листинг backgroundLayout и один textView внутри него).

+0

Его нужно нарисовать, используя холст, а не XML. Также, чтобы уточнить, я хочу только нарисовать текст в верхней строке многоточия. Не в середине. Спасибо хоть. –