2013-08-15 3 views
8

В настоящее время я использую paintObject.measureText(textCopy.substring(0,i)), итерации через копию текста TextView. Например, measureText("abc".substring(0,1)) даст мне относительные координаты x 'b'. y Координата Я получаю от layout.getLineTop(). Это работает, но неточно для x Координаты для non-monospaced fonts. Я могу немного откалибровать, но на каждом устройстве он работает по-другому.Найти точные координаты одного символа внутри TextView

Лучшее решение, о котором я могу думать, это перезаписать класс, который отвечает за рисование TextView на экране и, надеюсь, получить координаты каждого символа, нарисованного на экране.

Кто-нибудь знает, какой класс мне нужно переписать, чтобы выполнить это? Или, может быть, какое-то другое творческое решение?

+0

Должен ли текст содержать какую-либо разметку (например, некоторые теги html)? Если нет, вы можете просто переопределить «onDraw()» TextView и нарисовать текст по своему усмотрению. –

+0

Он может содержать натянутый текст. – Igor

+0

Ну, это немного усложняет ситуацию, в «onDraw()» вам придется отображать каждый символ на основе любого диапазона, к которому он принадлежит, например, полужирный или курсив и т. Д., Обновляя «Paint», который используется для рисования. –

ответ

7

Ну, это похоже на ошибку Paint.measureText() или другой более глубокий класс. Но у меня есть НАКОНЕЦ нашел путь вокруг него:

layout.getPrimaryHorizontal(int offset) 

Это очень легко. Вы просто перебираете макет, используя длину текста, который он использует.

Он вернет x символа БЕСПЛАТНО положения линии. Так что строки я все еще получаю от layout.getLineTop(). Кстати, если вы используете layout.getLineTop(), обратите внимание, что есть странное поведение, возможно, ошибка. Я отправил сообщение об ошибке here.

 Смежные вопросы

  • Нет связанных вопросов^_^