Android - Schatten auf Text?

184

Ich frage mich, wie man Schatten auf Text in Android hinzufügt?

Ich habe den folgenden Code, der auf eine Bitmap angewendet wird, und ich wollte beschattet werden ...

paint.setColor(Color.BLACK);
paint.setTextSize(55);
paint.setFakeBoldText(false);
paint.setShadowLayer(1, 0, 0, Color.BLACK); //This only shadows my whole view...
Grendizer
quelle
2
Denken Sie daran, dass Sie einen ShadowRadius haben müssen.
2
Sie sollten die Antwort @fhucho links als die richtige Antwort markieren. Ich habe versucht, das Gleiche zu tun, und habe es verpasst, als ich diesen Beitrag zum ersten Mal sah, da keine Antwort als richtig markiert wurde. Die oft hochgestufte Antwort ist irreführend, da sie sich nicht auf das programmgesteuerte Hinzufügen des Schattens bezieht.
Areyling

Antworten:

390

Sie sollten in der Lage sein, den Stil wie folgt hinzuzufügen (aus dem Quellcode für Ringdroid entnommen):

  <style name="AudioFileInfoOverlayText">
    <item name="android:paddingLeft">4px</item>
    <item name="android:paddingBottom">4px</item>
    <item name="android:textColor">#ffffffff</item>
    <item name="android:textSize">12sp</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
  </style>

Verwenden Sie in Ihrem Layout den folgenden Stil:

 <TextView android:id="@+id/info"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       style="@style/AudioFileInfoOverlayText"
       android:gravity="center" />

Bearbeiten: Der Quellcode kann hier eingesehen werden: https://github.com/google/ringdroid

Bearbeiten2: Um diesen Stil programmgesteuert festzulegen, gehen Sie wie folgt vor (geändert in diesem Beispiel , um den Ressourcen von ringdroid von oben zu entsprechen).

TextView infoTextView = (TextView) findViewById(R.id.info);
infoTextView.setTextAppearance(getApplicationContext(),  
       R.style.AudioFileInfoOverlayText);

Die Unterschrift für setTextAppearanceist

public void setTextAppearance (Kontextkontext, int resid)

Seit: API-Ebene 1
Legt die Textfarbe, Größe, den Stil, die Hinweisfarbe und die Hervorhebungsfarbe aus der angegebenen TextAppearance-Ressource fest.

Jim Schubert
quelle
1
Aber das OP fragt nach benutzerdefinierten Widgets!
HRJ
Das mag sein, aber nichts deutet darauf hin, dass er diese Methode in einer ImageView nicht verwenden konnte. Ich nahm an, dass er direkt malte, weil er es sonst nicht herausfinden konnte.
Jim Schubert
awesome ... fügt der Standardschrift die dringend benötigte Tiefe hinzu und lässt sie auf einem soliden Hintergrund 10-mal besser aussehen.
Matt K
@ Farhan siehe hier: stackoverflow.com/questions/4630440/…
Jim Schubert
2
Wirklich geholfen, Daumen hoch Bruder
Saad Bilal
72

Sie können sowohl in Code als auch in XML arbeiten. Es müssen nur 4 grundlegende Dinge eingestellt werden.

  1. Schattenfarbe
  2. Schatten Dx - Gibt den X-Achsen-Versatz des Schattens an. Sie können - / + Werte angeben, wobei -Dx links vom Text einen Schatten und rechts + Dx zeichnet
  3. shadow Dy - Gibt den Versatz der Y-Achse des Schattens an. -Dy gibt einen Schatten über dem Text an und + Dy gibt unter dem Text an.
  4. Schattenradius - Gibt an, wie stark der Schatten an den Rändern unscharf sein soll. Geben Sie einen kleinen Wert an, wenn der Schatten hervorstechen muss. Sonst anders.

z.B

    android:shadowColor="@color/text_shadow_color"
    android:shadowDx="-2"
    android:shadowDy="2"
    android:shadowRadius="0.01"

Dies zeichnet einen markanten Schatten auf der linken unteren Seite des Textes. Im Code können Sie so etwas hinzufügen.

    TextView item = new TextView(getApplicationContext());
    item.setText(R.string.text);
    item.setTextColor(getResources().getColor(R.color.general_text_color));
    item.setShadowLayer(0.01f, -2, 2,   getResources().getColor(R.color.text_shadow_color));
codeFood
quelle
7
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="20dp" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:shadowColor="#000"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="50"
        android:text="Text Shadow Example1"
        android:textColor="#FBFBFB"
        android:textSize="28dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Text Shadow Example2"
        android:textColor="#FBFBFB"
        android:textSize="28dp"
        android:textStyle="bold" />

</LinearLayout>

Im obigen XML-Layoutcode wird die Textansicht1 mit Schatteneffekt im Layout angegeben. Unten sind die Konfigurationselemente aufgeführt

android: shadowDx - Gibt den X-Achsen-Versatz des Schattens an. Sie können - / + Werte angeben, wobei -Dx links vom Text einen Schatten und rechts + Dx zeichnet

android: shadowDy - Gibt den Versatz des Schattens auf der Y-Achse an. -Dy gibt einen Schatten über dem Text an und + Dy gibt unter dem Text an.

android: shadowRadius - Gibt an, wie stark der Schatten an den Rändern unscharf sein soll. Geben Sie einen kleinen Wert an, wenn der Schatten hervorstechen muss. android: shadowColor - Gibt die Schattenfarbe an


Schatteneffekt auf Android TextView pragmatisch

Verwenden Sie das folgende Codefragment, um den Schatteneffekt auf die zweite Textansicht pragmatisch zu erhalten.

TextView textv = (TextView) findViewById(R.id.textview2);
textv.setShadowLayer(30, 0, 0, Color.RED);        

Ausgabe :

Geben Sie hier die Bildbeschreibung ein

Hoque MD Zahidul
quelle
3

Wenn Sie einen Schatten wie den von Android im Launcher erzielen möchten, verwalten wir diese Werte. Sie sind nützlich, wenn Sie Textansichten erstellen möchten, die als Widget ohne Hintergrund angezeigt werden.

android:shadowColor="#94000000"
android:shadowDy="2"
android:shadowRadius="4"
Roc Boronat
quelle
2

Zeichnen Sie 2 Texte: einen grauen (es wird der Schatten sein) und darüber den zweiten Text (y-Koordinate 1px mehr als Schattentext).

fhucho
quelle
1
Danke Jungs für eure Beiträge. Ich habe es gelöst, indem ich zwei Malobjekte und den setShadaowLayer für eines der Malobjekte verwendet habe.
Grendizer
2
Dies mag in Ordnung aussehen, wenn Sie Alpha verwenden, sieht aber nicht wie der schöne, weiche, deklarativ festgelegte Schatten aus.
ShibbyUK
2
 <style name="WhiteTextWithShadow" parent="@android:style/TextAppearance">
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
    <item name="android:shadowColor">@android:color/black</item>
    <item name="android:textColor">@android:color/white</item>
</style>

dann verwenden als

 <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            tools:text="Today, May 21"
            style="@style/WhiteTextWithShadow"/>
Dan Alboteanu
quelle