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

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进制,这是为了代码的可读性和规范。

时间: 2025-01-01 00:40:06

第六章 一张白纸好作画—Canvas画布(3)的相关文章

第六章 一张白纸好作画—Canvas画布(1)

第六章 一张白纸好作画-Canvas画布 前面的相关章节,我们详细说明过Android UI组件的使用.通过前面章节的学习,开发者已经可以开发出令人满意的UI效果了.但是有的时候,我们需要实现更加漂亮的UI效果,此时可能就无法直接使用UI组件,而是需要自己画出各种UI效果了. 在Android中,Canvas就是一个画布,开发者可以在画布上绘制想要的任何东西.在本章中,我们将介绍Canvas及相关的技术. 6.1 Canvas画布介绍 6.1.1View Canvas-使用普通View的Canv

第六章 一张白纸好作画—Canvas画布(5)

6.4.8区域 android.graphics.Region与Region.Op 在Canvas的绘画时,我们可能碰到止需要显示半个矩形,或者显示一部分图片,那么我们就要用到Canvas的设置区域的方法,有clipRect(Rect rect,Region.Op op).clipRegion(Region region)这两个方法.Region表示的是一个区域和Rect不同的是,它可以表示的一个不规则的样子,可以是椭圆.多边形等等,当然Region也可以表示一个矩形,而Rect仅仅是矩形. 同

第六章 一张白纸好作画—Canvas画布(2)

6.2 Canvas常用绘制方法 前面一节我们了解到如果创建一个画布,接下来我们就将要在这个画布上进行绘制.Android SDK的Canvas类中包含了一系列用于绘制的方法,方法分为3种类型,下面简单介绍这些常用的绘制方法. 1)Canvas类的几何图形(Geometry)方面的方法用于绘制点.绘制线.绘制矩形.绘制圆弧等. 其中一些主要的方法如表6-1所示: 方法 返回值 说明 drawARGB(int a, int r, int g, int b) void 将整体填充为某种颜色 draw

第六章 一张白纸好作画—Canvas画布(4)

6.4.4路径android.graphics.Path 当我们的需求是一个不规则的图形的时候,Canvas的drawRect等方法就不行了,这里就要用到drawPath(Path path, Paint paint)方法来按路径绘画一个形状.Canvas还有一个方法clipPath(Path path).这个方法用于按照设计的路径来设置Canvas中的有效区域. 下面我们就介绍下路径类,它是一个多个点和图形的集合. Path的构造方法比较简单,如下: Path path1 = new Path

《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章  继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章将帮助你解决许多常见的.复杂的建模问题,并解决你可能在现实中遇到的建模问题. 本章以多对多关系开始,这个类型的关系,无论是在现存系统还是新项目的建模中都非常普遍.接下来,我们会了解自引用关系,并探索获取嵌套对象图的各种策略.最后,本章以继承的高级建模和实体条件结束. 6-1  获取多对多关联中的链接表 问题

JavaScript DOM编程艺术-学习笔记(第五章、第六章)

第五章: 1.题外话:首先大声疾呼,"js无罪",有罪的是滥用js的那些人.js的father 布兰登-艾克,当初为了应付工作,10天就赶出了这个js,事后还说人家js是c语言和self语言"约"的产物,(百度百科说的,这些).....一个可怜的孩子-js.然后命运弄"人",js此时已世人皆知.可能是因为js的毁誉参半,它老爸才不想承认它吧.如果js会说话,它可能会给它布兰登-艾克说,"你当初怎么不把*******在墙上".这

再读大道至简第六章

大道之简临近了尾声,作者也开始了“与前文相呼应”,第六章的内容大部分建立在前面五章的基础之上,对相关的名词进行了进一步的阐释,理解,对有关的概念进行了扩充. 一开始说了,语言只是工具,这几乎与第一章的内容相呼应,不讲JAVA/C/C++等等语言的好坏,只是把他们放在工具的层面来说.没有对语言的膜拜也没有对语言的漠视.语言再不同,只是工具不同,适用于不同的环境.就像是犁地不需要铲子,扫地需要扫把一样的.笔者借由各种语言只是工具来引出了,那张幻灯片.看清代码.方法.工程.组织的关系. 在代码.方法.

阅读笔记3——《大道至简》第四、五、六章

“流于形式的沟通,可能是使得你的项目被不断推翻和不断延迟的最直接原因”,这是第四章的最后一句话,是我印象最深刻的一句话. 当我们在与客户交流时,要用客户能懂得方式,并且要保障每一次沟通的有效性,求道于盲是没有错误的,错误的是你睁着眼睛.现在很多公司和客户谈项目时总喜欢去吃饭,吃饭是没有错误的,但最终的结果大多是以酒醉收场.所以就需要最有效的沟通方式来减少各方面的损失,而这个最有效的方式则是通过各方面考究查询得知的.除此之外,我们在做项目时,要记得留下整个项目的历史记录,例如,在需求阶段,与谁联系

MiS603开发板 第十六章 图像之VGA接口测试

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十六章 图像之VGA接口测试 第十六章图像之VGA接口测试 在本章开始介绍视频图像处理开发平台的硬件结构,主要包括