Android-テキストの影?


184

アンドロイドでテキストに影を付ける方法を知りたいですか?

私はビットマップに適用される次のコードを持っていて、シャドウされたいと思いました...

paint.setColor(Color.BLACK);
paint.setTextSize(55);
paint.setFakeBoldText(false);
paint.setShadowLayer(1, 0, 0, Color.BLACK); //This only shadows my whole view...

2
ShadowRadiusが必要であることに注意してください。

2
@fhuchoの回答を正解としてマークしてください。私は同じことをしようとしていたが、この投稿を初めて見たときは、正解のマークが付けられていなかったので見逃した。プログラムでシャドウを追加することとは関係がないため、何度も投票された答えは誤解を招くものです。
2011年

回答:


390

次のようにスタイルを追加できるはずです(Ringdroidのソースコードから取得)。

  <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>

そしてあなたのレイアウトでは、次のようなスタイルを使用します:

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

編集:ソースコードはここで閲覧できます:https : //github.com/google/ringdroid

Edit2:このスタイルをプログラムで設定するには、次のようにします(この例から変更し、上記のringdroidのリソースに一致させます)。

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

の署名setTextAppearance

public void setTextAppearance(コンテキストコンテキスト、int resid)


導入:APIレベル1 指定されたTextAppearanceリソースから、テキストの色、サイズ、スタイル、ヒントの色、ハイライトの色を設定します。


1
しかし、OPはカスタムウィジェットを求めています!
HRJ

そうかもしれませんが、ImageViewでこのメソッドを使用できなかったことを示唆することは何もありません。私は彼が他の方法でそれを理解することができなかったので彼が直接ペイントしていると思いました。
ジムシューベルト

素晴らしい...必要な深みを標準フォントに追加し、無地の背景で10倍良く見えるようにします。
マットK

ここを参照してください@Farhan:stackoverflow.com/questions/4630440/...
ジム・シューベルト

2
本当に助かった、いいね!
Saad Bilal

72

コードとXMLの両方で行うことができます。設定する必要があるのは4つの基本的なものだけです。

  1. 影の色
  2. Shadow Dx-シャドウのX軸オフセットを指定します。-/ +値を指定できます。ここで、-Dxはテキストの左側に影を描き、+ Dxは右側に影を描きます
  3. シャドウDy-シャドウのY軸オフセットを指定します。-Dyはテキストの上に影を指定し、+ Dyはテキストの下に影を指定します。
  4. シャドウ半径-エッジでぼかすシャドウの量を指定します。影を目立たせる必要がある場合は、小さな値を指定します。それ以外の場合。

例えば

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

これにより、テキストの左下側に目立つ影が描画されます。コードでは、このようなものを追加できます。

    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));

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>

上記のXMLレイアウトコードでは、textview1にレイアウトのシャドウ効果が指定されています。以下は構成アイテムです

android:shadowDx –影のX軸オフセットを指定します。-/ +値を指定できます。ここで、-Dxはテキストの左側に影を描き、+ Dxは右側に影を描きます

android:shadowDy –影のY軸オフセットを指定します。-Dyはテキストの上に影を指定し、+ Dyはテキストの下に影を指定します。

android:shadowRadius –エッジでぼかすシャドウの量を指定します。影を目立たせる必要がある場合は、小さな値を指定します。android:shadowColor –影の色を指定します


Android TextViewのシャドウ効果を実用的に

以下のコードスニペットを使用して、2番目のTextViewのシャドウ効果を実用的に取得します。

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

出力:

ここに画像の説明を入力してください


3

Androidがランチャーで行うような影を実現したい場合は、これらの値を管理します。背景なしでウィジェットとして表示されるTextViewを作成する場合に便利です。

android:shadowColor="#94000000"
android:shadowDy="2"
android:shadowRadius="4"

2

2つのテキストを描画します。1つの灰色(影になる)とその上に2番目のテキストを描画します(y座標は影のテキストよりも1px多い)。


1
あなたの投稿をありがとう。2つのペイントオブジェクトを使用し、ペイントオブジェクトの1つでsetShadaowLayerを使用することで解決しました。
グレンダイザー2010

2
これは、アルファを使用する場合は問題ないように見えるかもしれませんが、宣言的に設定された素敵でソフトなシャドウのようには見えません。
ShibbyUK 2009

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>

次にとして使用

 <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"/>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.