Ist es möglich, mehrfarbigen Text mit einem Aufruf von Canvas.drawText () anzuzeigen?

7

Ich möchte Canvas.drawText () verwenden, um mehrfarbigen Text anzuzeigen. Genauer gesagt, möchte ich einen Teilstring des Textes markieren, der an die drawText () -Methode übergeben wird.

Der Text hat die Form eines SpannableString mit 0 oder mehr ForegroundColorSpan-Objekten.

Wenn Sie sich den Canvas-Code ansehen, scheint es, dass ein .toString () - Aufruf für die übergebene CharSequence bedeutet, dass dies nicht möglich ist.

Gibt es einen alternativen Weg?

EDIT: Der Text kann sich gelegentlich ändern (Gesamtänderungen, nicht inkrementell). Außerdem befinden sich potenziell mehrere Texte an verschiedenen Standorten in der benutzerdefinierten Ansicht.

    
Mark 02.05.2012, 08:53
quelle

4 Antworten

26

Ja, das ist möglich, indem Sie eine der Layout -Klassen verwenden. Dies sind Hilfsklassen zum Zeichnen von Text in eine Arbeitsfläche und unterstützen Spannables. Wenn sich Ihr Text nicht ändert, verwenden Sie ein StaticLayout.

Beispiel

Fügen Sie dies Ihrer benutzerdefinierten Ansichtsklasse hinzu

%Vor%

setze diesen Code in dein onLayout oder onSizeChanged

%Vor%

Rufen Sie dann in Ihrer Zeichenmethode einfach

auf %Vor%

Falls sich Ihr Text häufig ändert, können Sie DynamicLayout verwenden.

%Vor%

Ändern Sie den Text mithilfe des Bearbeitungsobjekts

%Vor%     
Renard 02.05.2012, 09:16
quelle
1

Ich habe es nicht mit Canvas verwendet. Siehe unten Code, wie ich es in Textansicht verwendet habe.

%Vor%

Sie können nun Textview als Bitmap auf Canvas zeichnen, obwohl ich denke, dass diese Methoden auch in der Malklasse existieren. Hoffnung nützlich für dich.

    
Hiren Dabhi 02.05.2012 10:29
quelle
0

Versuchen Sie etwas wie das, wenn Sie TextView

verwenden %Vor%

Bearbeiten: Überprüfen Sie für SpannableString, ob die folgenden Ihnen hilft

%Vor%     
Vinayak Bevinakatti 02.05.2012 09:06
quelle
0

Immer wenn Sie diesen Text für diese Ansicht schreiben, können Sie thatView.setBackgroundResource (R.drawable.multicolor); und

festlegen

In multicolor.xml schreiben

%Vor%

Ich hoffe, es wird definitiv funktionieren

Um die Textfarbe zu ändern, können Sie yourView.setTextColor (R.drawable.multicolor);

verwenden     
Anil Jadhav 02.05.2012 09:27
quelle

Tags und Links