2013-08-15 15 views
8

Obecnie używam paintObject.measureText(textCopy.substring(0,i)) podczas iteracji poprzez kopię tekstu TextView. Na przykład measureText("abc".substring(0,1)) da mi względne współrzędne x "b". Współrzędna y otrzymuję od layout.getLineTop(). To działa, ale nie jest dokładne nie jest dokładne dla x współrzędne dla nieokreślonych czcionek. Mogę trochę skalibrować, ale na każdym urządzeniu działa inaczej.Znajdź dokładne współrzędne pojedynczego znaku wewnątrz obiektu TextView

Najlepszym rozwiązaniem, które mogę wymyślić jest zastąpienie klasy, która jest odpowiedzialna za rysowanie TextView na ekranie i, miejmy nadzieję, uzyskać współrzędne każdej postaci narysowanej na ekranie.

Czy ktoś wie, jakie klasy muszę nadpisać, aby osiągnąć ten cel? A może jakieś inne twórcze rozwiązanie?

+0

Czy tekst ma zawierać jakikolwiek znacznik (jak niektóre znaczniki html)? Jeśli nie, możesz po prostu zastąpić "onDraw()" TextView i narysować tekst, jak chcesz. –

+0

Może zawierać tekst łączony. – Igor

+0

Cóż, to trochę komplikuje, w "onDraw()" będziesz musiał wyrenderować każdy znak bazujący na dowolnym zakresie, do którego należy, np. Pogrubienie lub kursywą, aktualizując 'Farbę' używaną do rysowania. –

Odpowiedz

7

Cóż, wygląda na to, że jest to błąd w postaci Paint.measureText() lub innej głębszej klasy. Ale mam WRESZCIE znalazł sposób wokół niego:

layout.getPrimaryHorizontal(int offset) 

To jest bardzo proste. Po prostu przeglądasz cały układ, używając długości tekstu, którego używasz.

Zwróci wartość x znaku NIEZALEŻNIE od pozycji wiersza. Tak więc linie wciąż otrzymuję od layout.getLineTop(). Przy okazji, jeśli używasz layout.getLineTop(), zauważ, że jest jakieś dziwne zachowanie, prawdopodobnie błąd. Przesłałem zgłoszenie błędu here.

Powiązane problemy