转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)
http://blog.csdn.net/floodingfire/article/details/8134033
译者:Ryan Hoo
来源:http://blog.stylingandroid.com/archives/378#
译者按:在外企工作的半年多中花了不少时间在国外的网站上搜寻资料,其中有一些相当有含金量的文章,我会陆陆续续翻译成中文,与大家共享之。初次翻译,“信达雅”三境界恐怕只到信的层次,望大家见谅!
-------------------------------------------------------------------------------------
译文:
通常一些像Photoshop这样的工具可以用来创建各种各样的文字效果,并且我们经常用到的一种效果就是阴影。Android是支持字体阴影的,在这片文章中,我们将会探讨各种创建阴影的方式。在TextView中实现字体阴影效果比在位图元素中的效率更高,并且使得设计可适配多种屏幕尺寸。相同条件下,Android的LayoutManager缩放TextView控件可比在ImageView中缩放位图要简单多了。
字体阴影需要四个相关参数:
1. android:shadowColor:阴影的颜色
2. android:shadowDx:水平方向上的偏移量
3. android:shadowDy:垂直方向上的偏移量
4. android:shadowRadius:阴影的范围
字体阴影是一种误称,因为实际上我们可以实现一些与阴影看起来毫不相关的效果,这个我们将在后面看到。无论如何,让我们从一个简单的类似阴影的效果开始:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/White" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Simple Shadow" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/TransparentGrey" android:shadowDx="3" android:shadowDy="3" android:shadowRadius="0.01" /> </LinearLayout>
这里有一些定义了颜色的支持文件,我们将在本文中用到它们。它们是 res/values/colours.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="White">#FFF</color> <color name="Black">#000</color> <color name="Grey">#7F7F7F</color> <color name="DarkGrey">#4F4F4F</color> <color name="Green">#0F0</color> <color name="TransparentGrey">#7F000000</color> </resources>
以及res/drawables/gradient.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="@color/White" android:endColor="@color/Black" android:angle="0"/> </shape>
如果运行程序,我们将会看到一个简单的投影效果。
我们可以通过增加阴影半径来软化阴影:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/White" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Soft Shadow" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/TransparentGrey" android:shadowDx="3" android:shadowDy="3" android:shadowRadius="1.5" /> </LinearLayout>
这个效果如下:
还有一件事情是,我们可以通过改变偏移量来有效的改变光源的方向:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/White" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Soft Shadow (Below)" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/TransparentGrey" android:shadowDx="3" android:shadowDy="-3" android:shadowRadius="1.5" /> </LinearLayout>
效果如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/Grey" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Engraved Shadow" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/White" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="0.6" /> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/Black" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/White" android:layout_width="wrap_content" android:text="Glowing Text" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/White" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="3" /> </LinearLayout>
效果如图:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/Black" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Ethereal Text" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/White" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="2" /> </LinearLayout>效果如图:
通过简单的改变阴影的颜色,我们也可以改变发光的效果。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/Black" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="Spooky Text" android:layout_height="wrap_content" android:padding="2dp" android:shadowColor="@color/Green" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="2" /> </LinearLayout>效果如图:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@drawable/gradient" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:textColor="@color/Black" android:layout_width="wrap_content" android:text="This is text which gets lost in the background" android:layout_height="wrap_content" android:textStyle="bold" android:padding="2dp" android:shadowColor="@color/White" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="0.7" /> </LinearLayout>
文章中所有的例子都是android:padding="2dp",设置其他的阴影或许会出现阴影被裁减的现象(译者注:阴影偏移量过多,超出文本框范围的现象。因此偏移量要适中。:-))。一个具有大范围的阴影,或者较大的偏移量需要更多的padding以防止这种现象。(译者注:意为增加TextView的padding)
这篇文章的所有源码都可以在这里找到。
©Mark Allison. All rights reserved.这篇文章最早出现在 Styling Android.
此页的某些部分是基于Google的创造和共享内容,并使用知识共享许可协议3.0版(CreativeCommons 3.0 Attribution License)。