2012-07-02 10 views
15

habe Ich habe versucht, eine zirkuläre TextView zu machen. Es ist ein Kreis, in dem ich den ganzen Raum über einer kreisförmigen Blase aufnehmen möchte, wie in der Abbildung unten gezeigt.Wie man eine zirkuläre TextView

Bitte siehe angehängtes Bild.

Circular bubble with text in side

In diesem Bild haben wir eine kreisförmige Blase mit Kreistext drin. Ich habe schon versucht, ovale Form .xml als Hintergrund TextView setzen, aber immer noch kein Glück.

Bearbeiten:

Als Text Länge erhöhen. Es muss verkleinert werden, um in den Kreis zu passen. Dies ist der schwierigste Teil, an den man denken sollte.

Antwort

10

Sie benötigen einen benutzerdefinierte Ansicht zu schaffen, wahrscheinlich aus TextView erstreckt, den Kreis als Hintergrundbild einstellen, und berechnen Sie die Textbreite/brechen die Linien manuell entsprechend der Breite des Textes.

Um die Breite eines Strings zu berechnen finden ist How to calculate string font width in pixels?

einige Mathematik und Berechnungen natürlich erforderlich, um den verfügbaren Speicherplatz pro Zeile zu messen; Aber ich denke, das ist der einzige Weg, da es keine Standardkomponente gibt.

Um den Text in die Ansicht zu platzieren, verwenden Sie drawText von Canvas class.

+2

+1, es gibt keine eingebaute Komponente dafür. Außerdem macht das Erstellen von benutzerdefinierten Ansichten Spaß :) – Felix

+0

Sie sagten, "berechnen Sie die Textbreite/brechen Sie die Zeilen manuell entsprechend der Breite des Textes." Dies muss dynamisch sein, um in Text unterschiedlicher Länge innerhalb des Kreises zu passen. Wie könnte ich die Anzahl der Zeilen messen, die mein Text innerhalb des Kreises füllt? –

+0

Ich denke, Sie würden den gesamten Text als eine Zeichenfolge messen, die Ihnen die gesamte benötigte Breite in px gibt. Dann müssen Sie den px-Raum pro Zeile berechnen, ausgehend von der Mitte nach außen. Ich habe keine Formel dafür, aber das ist wahrscheinlich die Art, wie ich mich darum kümmern würde. Zeilenumbrüche hinzufügen und dann zählen, wie viele Zeilenumbrüche Sie benötigen. Natürlich ist dies eine Art "dynamische" Berechnung, da die Anzahl der Zeilen direkt mit der Stringlänge jeder Zeile zusammenhängt. Ich bin mir sicher, es ist ein bisschen kompliziert und nicht so einfach, aber kann gemacht werden ;-) –

Verwandte Themen