Ich habe das seit dem Morgen versucht, aber ich kann es nicht zur Arbeit bringen.
Was ich versuche, ist ein ähnlicher langer Schatten für das TextView, der dem folgenden ähnelt:
Meine Lösung war bisher, eine Menge TextViews zu erstellen und sie untereinander zu kaskadieren, aber es gibt eine Menge Leistungsprobleme, wenn ich mit dem aktuellen Weg gehe.
Eine andere Lösung ist die Verwendung einer benutzerdefinierten Schriftart, die diese Ähnlichkeit hat, aber ich kann keine finden, die mit der Schriftart übereinstimmt, die ich gerade verwende.
Ich frage mich also, ob es möglich ist: (Ich muss erwähnen, dass die Textansichten dynamisch erstellt werden)
%Vor%Um mehrere davon in einer Linie (als kaskadierende Ebene) zu erstellen, scheint der Schatten glatt zu sein? Oder schlagen Sie irgendwelche anderen Lösungen vor?
Vielen Dank im Voraus.
Versuchen Sie, mit Rasterbildern zu spielen:
Paint.getTextBounds()
Methode Bitmap
mit solchen Metriken (W + H) x H
(Sie können % co_de verwenden % zur Optimierung der Speichernutzung) Bitmap.Config.ALPHA_8
at Bitmap
position 0x0
in eine neue mit Originalbreite, aber mit der Höhe von Bitmap
1px
von Y-axis
(von oben nach unten) und zeichne eine einzeilige Bitmap
mit dem entsprechenden Offset von Bitmap
(du wirst einige transparente Pixel überziehen) X-axis
Dieser Algorithmus kann optimiert werden, wenn Sie feststellen, dass alle Pixel in der letzten Zeile die gleiche Farbe haben (voller Schatten).
UPDATE 1
Ich habe dieses Ergebnis mit dieser schnellen Lösung erreicht:
MainActivity.java
%Vor%LongShadowTextView.java
%Vor%UPDATE 2
Hier ist das Endergebnis, das ich erreicht habe. Klonen Sie diese Demo von github.
Ich fürchte, Ihr vorgeschlagener Ansatz, setShadowLayer()
zu verwenden, funktioniert nicht, da dieser Ansatz effektiv ein zweites TextPaint mit Unschärfe zeichnet.
Wenn Sie mehrere TextPaints übereinander legen, bedeutet dies im Wesentlichen, dass Sie sie für jeden Schritt um 1 Pixel korrigieren müssen, was grafisch sehr sehr ist und eine sehr schlechte Leistung hat.
Dies ist eine ausgezeichnete Frage und eine echte Herausforderung!
Die einzige Lösung, die Ihnen in den Sinn kommt, besteht darin, jedes Glyph unabhängig zu behandeln, alle Pfadelemente zu untersuchen und einen Schatten zwischen dem äußersten Punkt links unten und oben rechts zu erweitern. Das scheint sehr kompliziert zu sein, und ich weiß nicht, ob es im SDK Mechanismen gibt, die einen solchen Ansatz ermöglichen.
Vorgeschlagener Messwert: