【问题标题】:Android - shadow on text?Android - 文字上的阴影?
【发布时间】:2011-01-30 00:36:21
【问题描述】:

我想知道如何在 android 中为文本添加阴影?

我有以下代码应用于位图,我想被遮蔽...

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

【问题讨论】:

  • 请记住,您必须拥有 ShadowRadius。
  • 您应该将答案@fhucho left 标记为正确答案;当我第一次看到这篇文章时,我试图做同样的事情并错过了它,因为没有答案被标记为正确。多次投票的答案具有误导性,因为它与以编程方式添加阴影无关。

标签: android


【解决方案1】:

您应该可以像这样添加样式(取自 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

编辑2: 要以编程方式设置此样式,您需要执行以下操作(从 this example 修改以匹配上面的 ringdroid 资源)

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

setTextAppearance 的签名是

public void setTextAppearance(上下文上下文,int resid)

自:API 级别 1
设置文本颜色、大小、样式、提示颜色和 从指定的 TextAppearance 资源中突出显示颜色。

【讨论】:

  • 但是 OP 要求自定义小部件!
  • 可能是这样,但没有任何迹象表明他不能在 ImageView 上使用此方法。我以为他是在直接画画,因为他无法弄清楚。
  • awesome...为标准字体增加了急需的深度,使其在纯色背景下看起来好 10 倍。
  • 帮了大忙,点个赞
【解决方案2】:

您可以同时使用代码和 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));

【讨论】:

    【解决方案3】:
    <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 上的阴影效果实用

    使用下面的代码 sn-p 实用地获得第二个 TextView 上的阴影效果。

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

    输出:

    【讨论】:

      【解决方案4】:

      如果您想实现像 Android 在 Launcher 中所做的那样的阴影,我们正在管理这些值。如果您想创建将作为 Widget 显示而没有背景的 TextView,它们会很有用。

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

      【讨论】:

        【解决方案5】:
         <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"/>
        

        【讨论】:

          【解决方案6】:

          绘制 2 个文本:一个灰色(它将是阴影)并在其顶部绘制第二个文本(y 坐标比阴影文本多 1px)。

          【讨论】:

          • 感谢大家的帖子。我确实通过使用两个绘画对象并在其中一个绘画对象上使用 setShadaowLayer 来解决它。
          • 如果您使用 alpha,这可能看起来不错,但看起来不像漂亮、柔和、声明式设置的阴影。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-21
          • 1970-01-01
          • 2021-09-28
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          相关资源
          最近更新 更多