乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第94页

书籍名:《Android从入门到精通》    作者:明日科技






第2篇 高级篇

本篇包括图形图像处理技术、多媒体应用开发、Content  Provider实现数据共享、线程与消息处理、Service应用、网络编程及Internet应用,并结合大量的图示、范例、经典应用和录像等使读者快速掌握Android开发中的高级内容,学习完本篇,读者可以掌握更深一层的Android开发技术。





第9章 图形图像处理技术

(  教学录像:2小时56分钟)

图形图像处理技术在Android中非常重要,特别是在开发益智类游戏或者2D游戏时,都离不开图形图像处理技术的支持。本章将对Android中的图形图像处理技术进行详细介绍。

通过阅读本章,您可以:

★  了解常用的绘图类



★  掌握如何绘制几何图形



★  掌握如何绘制文本



★  掌握如何绘制路径及绕路径文本



★  掌握如何绘制图片



★  掌握如何为图形添加旋转、缩放、倾斜和平移特效



★  掌握如何使用BitmapShader渲染图像



★  掌握如何实现逐帧动画



★  掌握如何实现补间动画





9.1 常用绘图类

教学录像:光盘\TM\lx\9\常用绘图类.exe

在Android中,绘制图像时最常应用的就是Paint类、Canvas类、Bitmap类和BitmapFactory类。其中,Paint类代表画笔,Canvas类代表画布。在现实生活中,有画笔和画布就可以作画了,在Android中也是如此,通过Paint类和Canvas类即可绘制图像。下面将对这4个类进行详细介绍。

9.1.1 Paint类

Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,首先需要创建该类的对象,这可以通过该类提供的构造方法来实现。通常情况下,只需要使用无参数的构造方法来创建一个使用默认设置的Paint对象,具体代码如下:

Paint  paint=new  Paint();

创建Paint类的对象后,还可以通过该对象提供的方法来对画笔的默认设置进行改变,例如,改变画笔的颜色、笔触宽度等。用于改变画笔设置的常用方法如表9.1所示。

表9.1 Paint类的常用方法





方 法  描 述

setARGB(int  a,  int  r,  int  g,  int  b)  用于设置颜色,各参数值均为0~255之间的整数,分别用于表示透明度、红色、绿色和蓝色值

setColor(int  color)  用于设置颜色,参数color可以通过Color类提供的颜色常量指定,也可以通过Color.rgb(int  red,int  green,int  blue)方法指定

setAlpha(int  a)  用于设置透明度,值为0~255之间的整数

setAntiAlias(boolean  aa)  用于指定是否使用抗锯齿功能,如果使用,会使绘图速度变慢

setDither(boolean  dither)  用于指定是否使用图像抖动处理,如果使用,会使图像颜色更加平滑和饱满,使图像更加清晰

setPathEffect(PathEffect  effect)  用于设置绘制路径时的路径效果,如点划线

setShader(Shader  shader)  用于设置渐变,可以使用LinearGradient(线性渐变)、RadialGradient(径向渐变)或者SweepGradient(角度渐变)

setShadowLayer(float  radius,  float  dx,  float  dy,  int  color)  用于设置阴影,参数radius为阴影的角度;dx和dy为阴影在x轴和y轴上的距离;color为阴影的颜色。如果参数radius的值为0,那么将没有阴影

setStrokeCap(Paint.Cap  cap)  用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设置笔刷的图形样式,参数值可以是Cap.BUTT、Cap.ROUND或Cap.SQUARE。主要体现在线的端点上

setStrokeJoin(Paint.Join  join)  用于设置画笔转弯处的连接风格,参数值为Join.BEVEL、Join.MITER或Join.ROUND

setStrokeWidth(float  width)  用于设置笔触的宽度

setStyle(Paint.Style  style)  用于设置填充风格,参数值为Style.FILL、Style.FILL_AND_STROKE或Style.STROKE

setTextAlign(Paint.Align  align)  用于设置绘制文本时的文字对齐方式,参数值为Align.CENTER、Align.LEFT或Align.RIGHT

setTextSize(float  textSize)  用于设置绘制文本时的文字的大小

setFakeBoldText(boolean  fakeBoldText)  用于设置是否为粗体文字

setXfermode(Xfermode  xfermode)  用于设置图形重叠时的处理方式,如合并、取交集或并集,经常用来制作橡皮的擦除效果

例如,要定义一个画笔,指定该画笔的颜色为红色,并带一个浅灰色的阴影,可以使用下面的代码:

Paint  paint=new  Paint();



paint.setColor(Color.  RED);



paint.setShadowLayer(2,  3,  3,  Color.rgb(180,  180,  180));

应用该画笔,在画布上绘制一个带阴影的矩形的效果如图9.1所示。



图9.1 绘制带阴影的矩形

说明:  关于如何在画布上绘制矩形,将在9.1.2节进行介绍。

例9.1   在Ecbpse中创建Android项目,名称为9.1,分别定义一个线性渐变、径向渐变和角度渐变的画笔,并应用这3个画笔绘制3个矩形。(实例位置:光盘\TM\sl\9\9.1)

关键代码如下:

Paint  paint=new  Paint();  //定义一个默认的画笔



//线性渐变



Shader  shader=new  LinearGradient(0,  0,  50,  50,  Color.RED,  Color.GREEN,  Shader.TileMode.MIRROR);



paint.setShader(shader);  //为画笔设置渐变器



canvas.drawRect(10,  70,  100,  150,  paint);  //绘制矩形



//径向渐变



shader=new  RadialGradient(160,  110,  50,  Color.RED,  Color.GREEN,  Shader.TileMode.MIRROR);



paint.setShader(shader);  //为画笔设置渐变器



canvas.drawRect(115,70,205,150,  paint);  //绘制矩形



//角度渐变



shader=new  SweepGradient(265,110,new  int[]{Color.RED,Color.GREEN,Color.BLUE},null);