2012-07-02 19 views
15

Ho cercato di creare una circolare TextView. È un cerchio in cui voglio sistemare tutto lo spazio sopra una bolla circolare, come mostrato nell'immagine qui sotto.Come avere un TextView circolare

Si prega di vedere l'immagine allegata.

Circular bubble with text in side

In questa immagine, abbiamo una bolla circolare con testo circolare in esso. Ho già provato a impostare la forma ovale .xml come sfondo di TextView ma ancora senza fortuna.

Modifica:

All'aumentare della lunghezza del testo. Deve ridurre le dimensioni per adattarsi all'interno del cerchio. Questa è la parte più difficile a cui pensare.

risposta

10

È necessario creare una vista personalizzata , che si estende da TextView probabilmente, impostando il cerchio come immagine di sfondo, e calcolare la larghezza del testo/rompere le linee manualmente in base alla larghezza del testo.

Per calcolare la larghezza di una stringa, vedere How to calculate string font width in pixels?

Alcuni matematica e calcoli è necessaria ovviamente per misurare la superficie disponibile per linea; ma penso che sia l'unico modo, perché non c'è nessun componente standard là fuori per farlo.

Per posizionare il testo sulla vista, utilizzare drawText dello Canvas class.

+2

+1, non esiste un componente integrato per questo. Inoltre, la creazione di viste personalizzate è divertente :) – Felix

+0

Hai detto "calcola la larghezza del testo/spezza le linee manualmente in base alla larghezza del testo". Questo deve essere dinamico per adattarsi al testo di lunghezza variabile all'interno del cerchio. Come posso misurare il numero di linee che il mio testo riempie all'interno del cerchio? –

+0

Penso che dovresti misurare l'intero testo come una stringa, che ti dà l'intera larghezza necessaria in px. Quindi è necessario calcolare lo spazio px per riga, iniziando dal centro verso l'esterno. Non ho una formula per quello a portata di mano, ma questo è probabilmente il modo in cui vorrei iniziare a guardarlo. Aggiunta di interruzioni di riga e quindi il conteggio del numero di interruzioni di linea necessarie. Ovviamente si tratta di un tipo di calcolo "dinamico", poiché il numero di linee è direttamente correlato alla lunghezza della stringa di ogni riga. Sono sicuro che è un po 'complicato e non così facile, ma può essere fatto ;-) –

Problemi correlati