안드로이드-텍스트 그림자?


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라는 정답을 정답으로 표시해야합니다. 나는 똑같은 일을하려고했지만 정답으로 표시된 답이 없기 때문에이 게시물을 처음봤을 때 놓쳤다. 프로그래밍 방식으로 그림자를 추가하는 것과 관련이 없기 때문에 여러 번 찬성 한 답변은 잘못된 것입니다.
areyling

답변:


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

공공 무효 setTextAppearance (컨텍스트 컨텍스트, int resid)

API 레벨 1
지정된 TextAppearance 자원에서 텍스트 색상, 크기, 스타일, 힌트 색상 및 강조 표시 색상을 설정합니다.


1
그러나 OP는 맞춤형 위젯을 요구하고 있습니다!
HRJ

그럴 수도 있지만 ImageView에서이 방법을 사용할 수 없다는 제안은 없습니다. 나는 그가 다른 방법으로는 그것을 알아낼 수 없었기 때문에 그가 직접 그림을 그리는 것으로 가정했다.
Jim Schubert

굉장 ... 표준 글꼴에 필요한 깊이를 추가하고 단색 배경에서 10 배 더 잘 보입니다.
Matt K


2
정말 형제까지, 엄지 손가락을 도왔다
사드 빌랄

72

코드와 XML 모두에서 할 수 있습니다. 4 가지 기본 사항 만 설정해야합니다.

  1. 그림자 색
  2. Shadow Dx-그림자의 X 축 오프셋을 지정합니다. -/ + 값을 지정할 수 있습니다. 여기서 -Dx는 텍스트 왼쪽에 그림자를, 오른쪽에 + Dx를 그립니다
  3. shadow 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의 그림자 효과

아래 코드 스 니펫을 사용하여 두 번째 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

두 개의 텍스트를 그립니다 : 하나의 회색 (그림자가 될 것입니다) 그리고 그 위에 두 번째 텍스트를 그립니다 (y는 그림자 텍스트보다 1px 더 많은 좌표).


1
게시물 주셔서 감사합니다. 두 개의 페인트 객체를 사용하고 페인트 객체 중 하나에서 setShadaowLayer를 사용하여 해결했습니다.
Grendizer

2
알파를 사용하면 괜찮아 보이지만 멋지고 부드럽고 선언적으로 설정된 그림자처럼 보이지는 않습니다.
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>

다음으로 사용

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