一张白纸好作画—Canvas画布(3)

来源:互联网 发布:手机怎么搜淘宝店铺号 编辑:程序博客网 时间:2024/05/16 04:39

6.4 Canvas绘制的辅助类

通过前面对Canvas的介绍,我们明白Canvas可以做很多事,绘画图形,变换等,当然在手机世界里我们看到的远远不是简单的图形就可以表现完全的,还有颜色,字体,等各种各样的元素组成,专门的工作交给专门的类来处理。下面我们介绍一些Canvas常用到的一些辅助类。

6.4.1画笔android.graphics.Paint

在Canvas绘制的辅助类中,使用频率最多的是画笔类—Paint。在Canvas的绘制的方法中都带有一个参数,Paint。这个参数就是画笔,Paint类包含样式和颜色有关如何绘制几何形状,文本和位图的信息。Canvas是一块画布,具体的文本和位图如何显示,这就是在Paint类中定义了。

下面我们通过Paint类中的主要方法来了解它到底能做什么,详情请参考表6-4。

方法

返回值

说明

setColor(int color)

void

设置画笔颜色。

setARGB(int a, int r, int g, int b)

void

设置画笔的A(透明度),R(红),G(绿),B(蓝),值(0x00000000-0xffffffff)。单个的值范围为0-255。

setTypeface(Typeface typeface)

Typeface

设置字体,通过Typeface可以加载Android内部的字体,一般为宋体对于中文,部分ROM可以自己添加,比如雅黑等等。

setStyle(Paint.Style style)

void

设置样式,Paint.Style.FILL填充,或Paint.Style.STROK凹陷,空心效果。

setStrokeWidth(float width)

void

设置边框的宽度。

setTextSize(float textSize)

void

设置字体大小。

setTextAlign(Paint.Align align)

void

设置文本对齐方式。

setShader(Shader shader)

Shader

设置阴影,Shader类是一个矩阵对象,如果为NULL将清除阴影。

setUnderlineText(boolean underlineText)

void

是否设置下划线。

setAntiAlias(boolean aa)

void

如果设置为true则去锯齿。

setPathEffect(PathEffect effect)

PathEffect

设置路径效果。

表6-4 Paint类的一些主要方法

6.4.2字体android.graphics.Typeface

很多时候我们希望看到跟别的应用不同文字效果,那么这里我们就要用到字体(Typeface)这个类,通过设置字体(TypefacesetTypeface(Typeface typeface))的方法来进行设置。

在Android系统中,自带的只有三种字体“sans”,“serif”和“monospace”。有时候,系统自带的字体并不能满足我们特殊的需求,这时候就需要引用其他的字体了。可以把下载的字体文件放在assets目录下,再进行引用。

设置字体一般有2种方式:

1)在Android XML文件中设置字体

<TextView android:text="Hello,  World! 您好"

      <!-- android:typeface用于指定字体-->

android:typeface ="sans" 

android:textSize="20sp" />

2)代码中设置字体

TextView tv =  (TextView)findViewById(R.id.your_textview_id); 

// 从assert中获取有资源,采用getAserts(),通过给出在assert/下面的相对路径来获取。

// 在实际使用中,字体库也可能存在于SD卡上,则可以采用createFromFile()来替代createFromAsset。

Typeface face = Typeface.createFromAsset(getAssets(),"fonts/xxx.ttf"  ); 

tv.setTypeface(face);

经验分享:

1.系统自带的字体中,缺省采用采用sans,英文字体有差异,大部分手机设备的中文字体没有差异。同时,在很多手机设备中,设置中文字体为黑体或者粗体等等是没有效果的。

2.自定义的字体不能直接在XML文件中进行,需要编写源代码。

3.使用其他字库,都会消耗程序的空间,这是要非常注意的。

4. Android并非和所有的TTF字体都能兼容,尤其在中文特殊字体的支持会存在问题,对于不兼容的字体,Android不会报错,只是无法正常显示。一般而言我们都会使用系统缺省提供的字体。文件命名上更需要注意,文件是中文名字,会出现报错。而且这些字库有时并不能完全提供你所需要的文字。

举个例子,省略方式。当文字太多的时候,可以通过省略号省略后面的内容,省略号是使用“…”作为一个字体,可通过“android:ellipsize“属性进行设置。如果我们需要使用省略功能,需要确保字体具有省略号。此外,为了保证长度的一致,Android会进行填充处理,除了将一个字符更换为省略符合外,后面的字符将更换为一个特殊的Unicode字符,‘ZERO WIDTH NO-BREAK SPACE’ (U+FEFF)。这个字符并占用任何可视的位置,但是保障了字符串具有同样的长度。不是所有的字体都支持这个特殊的字符,可能会引发一些乱码现象。

6.4.3颜色android.graphics.Color

有了画笔,字体,那么我们就给画笔和字体用上自己喜欢的颜色。在Android这个虚拟的世界中也有个类来表现色彩,那就是这里我们要介绍的颜色类(android.graphics.Color)。Android的颜色是ARGB颜色,即A(透明度)、R(红)、G(绿)、B(蓝)。

Android中有几种设置界面背景及文字颜色的方法,下面由浅入深分别介绍Android中设置颜色的3种方法:

1)直接在布局文件中设置:

<!-- 设置为白色  -->

android:backgound="#FFFFFFFF"

<!-- 设置为黑色  -->

android:textcolor="#000"

<!-- 设置为透明  -->

android: backgound =" @  android.R.color.transparent "

2)从资源文件中提取出来设置:

首先把颜色提取出来形成资源,放在资源文件下面(values/drawable/color.xml)。

<?xml  version="1.0" encoding="utf-8"?>

<resources>

<drawable  name="white">#FFFFFFFF</drawable>

<drawable  name="black">#FF000000</drawable>

</resources>

然后在布局文件中使用。

android:backgound="@drawable/white",  android:textcolor="@drawable/black"

3)通过java代码来设置:

// 设置为黑色

textView  .setTextColor(getResources().getColor(android.R.color.black));

// 设置为白色

textView.setBackGound(0xFFFFFFFF);

经验分享:

从上面的例子中我们看到了android.R.color.transparent这个颜色。这个是Android系统自带的颜色,常用的有transparent(透明)、black(黑色)、white(白色)等等。设置的方法参考上面的代码。

注意在xml文件中设置颜色的前缀必须加个“#”。

设置颜色的时候一般用8位16进制数来表示(0Xffff0000即红色),允许省略A(透明度)(0xff000),也可以简化的写(0xf00)。也可以将16进制的数改成其他进制的数值,一般推荐使用16进制,这是为了代码的可读性和规范。

0 0